Ocarina of Time (#64)
* first commit (not including OoT data files yet)
* added some basic options
* rule parser works now at least
* make sure to commit everything this time
* temporary change to BaseClasses for oot
* overworld location graph builds mostly correctly
* adding oot data files
* commenting out world options until later since they only existed to make the RuleParser work
* conversion functions between AP ids and OOT ids
* world graph outputs
* set scrub prices
* itempool generates, entrances connected, way too many options added
* fixed set_rules and set_shop_rules
* temp baseclasses changes
* Reaches the fill step now, old event-based system retained in case the new way breaks
* Song placements and misc fixes everywhere
* temporary changes to make oot work
* changed root exits for AP fill framework
* prevent infinite recursion due to OoT sharing usage of the address field
* age reachability works hopefully, songs are broken again
* working spoiler log generation on beatable-only
* Logic tricks implemented
* need this for logic tricks
* fixed map/compass being placed on Serenade location
* kill unreachable events before filling the world
* add a bunch of utility functions to prepare for rom patching
* move OptionList into generic options
* fixed some silly bugs with OptionList
* properly seed all random behavior (so far)
* ROM generation working
* fix hints trying to get alttp dungeon hint texts
* continue fixing hints
* add oot to network data package
* change item and location IDs to 66000 and 67000 range respectively
* push removed items to precollected items
* fixed various issues with cross-contamination with multiple world generation
* reenable glitched logic (hopefully)
* glitched world files age-check fix
* cleaned up some get_locations calls
* added token shuffle and scrub shuffle, modified some options slightly to make the parsing work
* reenable MQ dungeons
* fix forest mq exception
* made targeting style an option for now, will be cosmetic later
* reminder to move targeting to cosmetics
* some oot option maintenance
* enabled starting time of day
* fixed issue breaking shop slots in multiworld generation
* added "off" option for text shuffle and hints
* shopsanity functionality restored
* change patch file extension
* remove unnecessary utility functions + imports
* update MIT license
* change option to "patch_uncompressed_rom" instead of "compress_rom"
* compliance with new AutoWorld systems
* Kill only internal events, remove non-internal big poe event in code
* re-add the big poe event and handle it correctly
* remove extra method in Range option
* fix typo
* Starting items, starting with consumables option
* do not remove nonexistent item
* move set_shop_rules to after shop items are placed
* some cleanup
* add retries for song placement
* flagged Skull Mask and Mask of Truth as advancement items
* update OoT to use LogicMixin
* Fixed trying to assign starting items from the wrong players
* fixed song retry step
* improved option handling, comments, and starting item replacements
* DefaultOnToggle writes Yes or No to spoiler
* enable compression of output if Compress executable is present
* clean up compression
* check whether (de)compressor exists before running the process
* allow specification of rom path in host.yaml
* check if decompressed file already exists before decompressing again
* fix triforce hunt generation
* rename all the oot state functions with prefix
* OoT: mark triforce pieces as completion goal for triforce hunt
* added overworld and any-dungeon shuffle for dungeon items
* Hide most unshuffled locations and events from the list of locations in spoiler
* build oot option ranges with a generic function instead of defining each separately
* move oot output-type control to host.yaml instead of individual yamls
* implement dungeon song shuffle
* minor improvements to overworld dungeon item shuffle
* remove random ice trap names in shops, mostly to avoid maintaining a massive censor list
* always output patch file to folder, remove option to generate ROM in preparation for removal
* re-add the fix for infinite recursion due to not being light or dark world
* change AP-sendable to Ocarina of Time model, since the triforce piece has some extra code apparently
* oot: remove item_names and location_names
* oot: minor fixes
* oot: comment out ROM patching
* oot: only add CollectionState objects on creation if actually needed
* main entrance shuffle method and entrances-based rules
* fix entrances based rules
* disable master quest and big poe count options for client compatibility
* use get_player_name instead of get_player_names
* fix OptionList
* fix oot options for new option system
* new coop section in oot rom: expand player names to 16 bytes, write AP_PLAYER_NAME at end of PLAYER_NAMES
* fill AP player name in oot rom with 0 instead of 0xDF
* encode player name with ASCII for fixed-width
* revert oot player name array to 8 bytes per name
* remove Pierre location if fast scarecrow is on
* check player name length
* "free_scarecrow" not "fast_scarecrow"
* OoT locations now properly store the AP ID instead of the oot internal ID
* oot __version__ updates in lockstep with AP version
* pull in unmodified oot cosmetic files
* also grab JSONDump since it's needed apparently
* gather extra needed methods, modify imports
* delete cosmetics log, replace all instances of SettingsList with OOTWorld
* cosmetic options working, except for sound effects (due to ear-safe issues)
* SFX, Music, and Fanfare randomization reenabled
* move OoT data files into the worlds folder
* move Compress and Decompress into oot data folder
* Replace get_all_state with custom method to avoid the cache
* OoT ROM: increment item counter before setting incoming item/player values to 0, preventing desync issues
* set data_version to 0
* make Kokiri Sword shuffle off by default
* reenable "Random Choice" for various cosmetic options
* kill Ruto's Letter turnin if open fountain
also fix for shopsanity
* place Buy Goron/Zora Tunic first in shop shuffle
* make ice traps appear as other items instead of breaking generation
* managed to break ice traps on non-major-only
* only handle ice traps if they are on
* fix shopsanity for non-oot games, and write player name instead of player number
* light arrows hint uses player name instead of player number
* Reenable "skip child zelda" option
* fix entrances_based_rules
* fix ganondorf hint if starting with light arrows
* fix dungeonitem shuffle and shopsanity interaction
* remove has_all_of, has_any_of, count_of in BaseClasses, replace usage with has_all, has_any, has_group
* force local giveable item on ZL if skip_child_zelda and shuffle_song_items is any
* keep bosses and bombchu bowling chus out of data package
* revert workaround for infinite recursion and fix it properly
* fix shared shop id caches during patching process
* fix shop text box overflows, as much as possible
* add default oot host.yaml option
* add .apz5, .n64, .z64 to gitignore
* Properly document and name all (functioning) OOT options
* clean up some imports
* remove unnecessary files from oot's data
* fix typo in gitignore
* readd the Compress and Decompress utilities, since they are needed for generation
* cleanup of imports and some minor optimizations
* increase shop offset for item IDs to 0xCB
* remove shop item AP ids entirely
* prevent triforce pieces for other players from being received by yourself
* add "excluded" property to Location
* Hint system adapted and reenabled; hints still unseeded
* make hints deterministic with lists instead of sets
* do not allow hints to point to Light Arrows on non-vanilla bridge
* foreign locations hint as their full name in OoT rather than their region
* checkedLocations now stores hint names by player ID, so that the same location in different worlds can have hints associated
* consolidate versioning in Utils
* ice traps appear as major items rather than any progression item
* set prescription and claim check as defaults for adult trade item settings
* add oot options to playerSettings
* allow case-insensitive logic tricks in yaml
* fix oot shopsanity option formatting
* Write OoT override info even if local item, enabling local checks to show up immediately in the client
* implement CollectionState.can_live_dmg for oot glitched logic
* filter item names for invalid characters when patching shops
* make ice traps appear according to the settings of the world they are shuffled into, rather than the original world
* set hidden-spoiler items and locations with Shop items to events
* make GF carpenters, Gerudo Card, Malon, ZL, and Impa events if the relevant settings are enabled, preventing them from appearing in the client on game start
* Fix oot Glitched and No Logic generation
* fix indenting
* Greatly reduce displayed cosmetic options
* Change oot data version to 1
* add apz5 distribution to webhost
* print player name if an ALttP dungeon contains a good item for OoT world
* delete unneeded commented code
* remove OcarinaSongs import to satisfy lint
											 
										 
										
											2021-09-02 08:35:05 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  R u l e s  h e r e  d e f i n e  r e p l a c e m e n t  "functions"  o r  i t e m  a l i a s e s . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  T h e  a l i a s  i t s e l f  m u s t  a l w a y s  b e  a l p h a n u m e r i c  o n l y - - s t r i n g  i t e m s  b y p a s s  t h e  a l i a s i n g . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  R u l e s  s h o u l d  b e  s i m p l e  p y t h o n  a n d  c a n  i n v o k e  o t h e r  a l i a s e s  o r  e v e n  t h e 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  a t / h e r e  m e t a r u l e s . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Hookshot" :  "Progressive_Hookshot" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Longshot" :  "(Progressive_Hookshot, 2)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Silver_Gauntlets" :  "(Progressive_Strength_Upgrade, 2)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Golden_Gauntlets" :  "(Progressive_Strength_Upgrade, 3)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Scarecrow" :  "Progressive_Hookshot and can_play(Scarecrow_Song)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Distant_Scarecrow" :  "(Progressive_Hookshot, 2) and can_play(Scarecrow_Song)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  I t e m s  c a n  b e  d i r e c t l y  a l i a s e d ,  s o  a l l  o c c u r r e n c e s  o f  t h a t  i t e m  n a m e  g e t  r e p l a c e d , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  b u t  m a k e  s u r e  t h a t  i n s i d e  t h e  r u l e  y o u  u s e  t h e  s t r i n g  ' i t e m '  f o r m 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  t o  a v o i d  i n f i n i t e  r e c u r s i o n . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Goron_Tunic" :  "'Goron Tunic' or Buy_Goron_Tunic" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Zora_Tunic" :  "'Zora Tunic' or Buy_Zora_Tunic" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  R e f i l l  a l i a s e s .  I f  w e  s t a r t  c o n s i d e r i n g  B o w  e t c  r e f i l l s  w e  c a n  e n a b l e  t h e s e  a l i a s e s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  w i t h o u t  e d i t i n g  a l l  l o g i c  f i l e s . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  "Bow" :  "'Bow'" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  "Slingshot" :  "'Slingshot'" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Bombs" :  "Bomb_Bag" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Deku_Shield" :  "Buy_Deku_Shield" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Hylian_Shield" :  "Buy_Hylian_Shield" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Nuts" :  "Buy_Deku_Nut_5 or Buy_Deku_Nut_10 or Deku_Nut_Drop" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Sticks" :  "Buy_Deku_Stick_1 or Deku_Stick_Drop" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Bugs" :  "'Bugs' or Buy_Bottle_Bug" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Blue_Fire" :  "'Blue Fire' or Buy_Blue_Fire" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Fish" :  "'Fish' or Buy_Fish" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Fairy" :  "'Fairy' or Buy_Fairys_Spirit" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "Big_Poe" :  "'Big Poe'" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_bombchus" :  "(Buy_Bombchu_5 or Buy_Bombchu_10 or Buy_Bombchu_20 or Bombchu_Drop) and (bombchus_in_logic or Bomb_Bag)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "found_bombchus" :  "(bombchus_in_logic and (Bombchus or Bombchus_5 or Bombchus_10 or Bombchus_20)) or (not bombchus_in_logic and Bomb_Bag)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_explosives" :  "Bombs or (bombchus_in_logic and has_bombchus)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "is_child" :  "current_spot_child_access" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "is_adult" :  "current_spot_adult_access" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "is_starting_age" :  "current_spot_starting_age_access" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "is_glitched" :  "logic_rules != 'glitchless'" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_blast_or_smash" :  "has_explosives or can_use(Megaton_Hammer)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_child_attack" :  "is_child and (Slingshot or Boomerang or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire))" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_child_damage" :  "is_child and (Slingshot or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire))" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_cut_shrubs" :  "is_adult or Sticks or Kokiri_Sword or Boomerang or has_explosives" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_dive" :  "Progressive_Scale" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_leave_forest" :  "open_forest != 'closed' or is_adult or is_glitched or Deku_Tree_Clear" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_plant_bugs" :  "is_child and Bugs" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_ride_epona" :  "is_adult and Epona and (can_play(Eponas_Song) or (is_glitched and can_hover))" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_stun_deku" :  "is_adult or (Slingshot or Boomerang or Sticks or Kokiri_Sword or has_explosives or can_use(Dins_Fire) or Nuts or Deku_Shield)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_summon_gossip_fairy" :  "Ocarina and (Zeldas_Lullaby or Eponas_Song or Song_of_Time or Suns_Song)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_summon_gossip_fairy_without_suns" :  "Ocarina and (Zeldas_Lullaby or Eponas_Song or Song_of_Time)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_take_damage" :  "damage_multiplier != 'ohko' or Fairy or can_use(Nayrus_Love)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_plant_bean" :  "is_child and (Magic_Bean or Magic_Bean_Pack)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_play(song)" :  "Ocarina and song" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_open_bomb_grotto" :  "can_blast_or_smash and (Stone_of_Agony or logic_grottos_without_agony)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_open_storm_grotto" :  "can_play(Song_of_Storms) and (Stone_of_Agony or logic_grottos_without_agony)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  T h e  l a s t  c a s e  i n  a  c o n d i t i o n a l  s t i l l  n e e d s  a  c h e c k ,  t o  p r e v e n t  f a i l u r e  f r o m  f a l l i n g  t h r o u g h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  i n t o  w h a t  s h o u l d  b e  t h e  ' e l s e '  c a s e . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_use_projectile" :  "has_explosives or (is_adult and (Bow or Hookshot)) or (is_child and (Slingshot or Boomerang))" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_projectile(for_age)" :  " h a s _ e x p l o s i v e s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( f o r _ a g e  = =  c h i l d  a n d  ( S l i n g s h o t  o r  B o o m e r a n g ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( f o r _ a g e  = =  a d u l t  a n d  ( B o w  o r  H o o k s h o t ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( f o r _ a g e  = =  b o t h  a n d  ( S l i n g s h o t  o r  B o o m e r a n g )  a n d  ( B o w  o r  H o o k s h o t ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( f o r _ a g e  = =  e i t h e r  a n d  ( S l i n g s h o t  o r  B o o m e r a n g  o r  B o w  o r  H o o k s h o t ) ) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  c a n _ u s e  a n d  h e l p e r s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  T h e  p a r s e r  r e d u c e s  t h i s  t o  s m a l l e s t  f o r m  b a s e d  o n  i t e m  c a t e g o r y . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  N o t e  t h a t  c a n _ u s e ( i t e m )  i s  F a l s e  f o r  a n y  i t e m  n o t  c o v e r e d  h e r e . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_use(item)" :  " ( _ i s _ m a g i c _ i t e m ( i t e m )  a n d  i t e m  a n d  M a g i c _ M e t e r ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( _ i s _ a d u l t _ i t e m ( i t e m )  a n d  i s _ a d u l t  a n d  i t e m ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( _ i s _ m a g i c _ a r r o w ( i t e m )  a n d  i s _ a d u l t  a n d  i t e m  a n d  B o w  a n d  M a g i c _ M e t e r ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( _ i s _ c h i l d _ i t e m ( i t e m )  a n d  i s _ c h i l d  a n d  i t e m ) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "_is_magic_item(item)" :  "item == Dins_Fire or item == Farores_Wind or item == Nayrus_Love or item == Lens_of_Truth" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "_is_adult_item(item)" :  "item == Bow or item == Megaton_Hammer or item == Iron_Boots or item == Hover_Boots or item == Hookshot or item == Longshot or item == Silver_Gauntlets or item == Golden_Gauntlets or item == Goron_Tunic or item == Zora_Tunic or item == Scarecrow or item == Distant_Scarecrow or item == Mirror_Shield" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "_is_child_item(item)" :  "item == Slingshot or item == Boomerang or item == Kokiri_Sword or item == Sticks or item == Deku_Shield" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "_is_magic_arrow(item)" :  "item == Fire_Arrows or item == Light_Arrows" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  B i g g o r o n ' s  t r a d e  p a t h 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  E R  w i t h  c e r t a i n  s e t t i n g s  d i s a b l e s  t i m e r s  a n d  p r e v e n t s  i t e m s  f r o m  r e v e r t i n g  o n  s a v e  w a r p . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  O t h e r w i s e ,  t o  g e t  t o  B i g g o r o n  r e q u i r e s :  a  t r i c k ,  c l e a r i n g  b o u l d e r s  o n  D M T ,  o r  D a r u n i a ' s  C h a m b e r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "guarantee_trade_path" :  "disable_trade_revert or can_blast_or_smash or 'Stop GC Rolling Goron as Adult' or (logic_dmt_climb_hovers and can_use(Hover_Boots)) or (logic_biggoron_bolero and not warp_songs and can_play(Bolero_of_Fire) and at('DMC Central Local', can_use(Hookshot) or can_use(Hover_Boots) or can_plant_bean))" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "guarantee_hint" :  "(hints == 'mask' and Mask_of_Truth) or (hints == 'agony' and Stone_of_Agony) or (hints != 'mask' and hints != 'agony')" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_fire_source" :  "can_use(Dins_Fire) or can_use(Fire_Arrows)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_fire_source_with_torch" :  "has_fire_source or (is_child and Sticks)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  G e r u d o  F o r t r e s s 
							 
						 
					
						
							
								
									
										
										
										
											2022-05-01 13:05:52 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    "can_finish_GerudoFortress" :  " ( g e r u d o _ f o r t r e s s  = =  ' n o r m a l '  a n d  ( S m a l l _ K e y _ T h i e v e s _ H i d e o u t ,  4 )  a n d  ( i s _ a d u l t  o r  K o k i r i _ S w o r d  o r  i s _ g l i t c h e d )  a n d  ( i s _ a d u l t  a n d  ( B o w  o r  H o o k s h o t  o r  H o v e r _ B o o t s )  o r  G e r u d o _ M e m b e r s h i p _ C a r d  o r  l o g i c _ g e r u d o _ k i t c h e n  o r  i s _ g l i t c h e d ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( g e r u d o _ f o r t r e s s  = =  ' f a s t '  a n d  S m a l l _ K e y _ T h i e v e s _ H i d e o u t  a n d  ( i s _ a d u l t  o r  K o k i r i _ S w o r d  o r  i s _ g l i t c h e d ) ) 
							 
						 
					
						
							
								
									
										
											 
										 
										
											
												Ocarina of Time (#64)
* first commit (not including OoT data files yet)
* added some basic options
* rule parser works now at least
* make sure to commit everything this time
* temporary change to BaseClasses for oot
* overworld location graph builds mostly correctly
* adding oot data files
* commenting out world options until later since they only existed to make the RuleParser work
* conversion functions between AP ids and OOT ids
* world graph outputs
* set scrub prices
* itempool generates, entrances connected, way too many options added
* fixed set_rules and set_shop_rules
* temp baseclasses changes
* Reaches the fill step now, old event-based system retained in case the new way breaks
* Song placements and misc fixes everywhere
* temporary changes to make oot work
* changed root exits for AP fill framework
* prevent infinite recursion due to OoT sharing usage of the address field
* age reachability works hopefully, songs are broken again
* working spoiler log generation on beatable-only
* Logic tricks implemented
* need this for logic tricks
* fixed map/compass being placed on Serenade location
* kill unreachable events before filling the world
* add a bunch of utility functions to prepare for rom patching
* move OptionList into generic options
* fixed some silly bugs with OptionList
* properly seed all random behavior (so far)
* ROM generation working
* fix hints trying to get alttp dungeon hint texts
* continue fixing hints
* add oot to network data package
* change item and location IDs to 66000 and 67000 range respectively
* push removed items to precollected items
* fixed various issues with cross-contamination with multiple world generation
* reenable glitched logic (hopefully)
* glitched world files age-check fix
* cleaned up some get_locations calls
* added token shuffle and scrub shuffle, modified some options slightly to make the parsing work
* reenable MQ dungeons
* fix forest mq exception
* made targeting style an option for now, will be cosmetic later
* reminder to move targeting to cosmetics
* some oot option maintenance
* enabled starting time of day
* fixed issue breaking shop slots in multiworld generation
* added "off" option for text shuffle and hints
* shopsanity functionality restored
* change patch file extension
* remove unnecessary utility functions + imports
* update MIT license
* change option to "patch_uncompressed_rom" instead of "compress_rom"
* compliance with new AutoWorld systems
* Kill only internal events, remove non-internal big poe event in code
* re-add the big poe event and handle it correctly
* remove extra method in Range option
* fix typo
* Starting items, starting with consumables option
* do not remove nonexistent item
* move set_shop_rules to after shop items are placed
* some cleanup
* add retries for song placement
* flagged Skull Mask and Mask of Truth as advancement items
* update OoT to use LogicMixin
* Fixed trying to assign starting items from the wrong players
* fixed song retry step
* improved option handling, comments, and starting item replacements
* DefaultOnToggle writes Yes or No to spoiler
* enable compression of output if Compress executable is present
* clean up compression
* check whether (de)compressor exists before running the process
* allow specification of rom path in host.yaml
* check if decompressed file already exists before decompressing again
* fix triforce hunt generation
* rename all the oot state functions with prefix
* OoT: mark triforce pieces as completion goal for triforce hunt
* added overworld and any-dungeon shuffle for dungeon items
* Hide most unshuffled locations and events from the list of locations in spoiler
* build oot option ranges with a generic function instead of defining each separately
* move oot output-type control to host.yaml instead of individual yamls
* implement dungeon song shuffle
* minor improvements to overworld dungeon item shuffle
* remove random ice trap names in shops, mostly to avoid maintaining a massive censor list
* always output patch file to folder, remove option to generate ROM in preparation for removal
* re-add the fix for infinite recursion due to not being light or dark world
* change AP-sendable to Ocarina of Time model, since the triforce piece has some extra code apparently
* oot: remove item_names and location_names
* oot: minor fixes
* oot: comment out ROM patching
* oot: only add CollectionState objects on creation if actually needed
* main entrance shuffle method and entrances-based rules
* fix entrances based rules
* disable master quest and big poe count options for client compatibility
* use get_player_name instead of get_player_names
* fix OptionList
* fix oot options for new option system
* new coop section in oot rom: expand player names to 16 bytes, write AP_PLAYER_NAME at end of PLAYER_NAMES
* fill AP player name in oot rom with 0 instead of 0xDF
* encode player name with ASCII for fixed-width
* revert oot player name array to 8 bytes per name
* remove Pierre location if fast scarecrow is on
* check player name length
* "free_scarecrow" not "fast_scarecrow"
* OoT locations now properly store the AP ID instead of the oot internal ID
* oot __version__ updates in lockstep with AP version
* pull in unmodified oot cosmetic files
* also grab JSONDump since it's needed apparently
* gather extra needed methods, modify imports
* delete cosmetics log, replace all instances of SettingsList with OOTWorld
* cosmetic options working, except for sound effects (due to ear-safe issues)
* SFX, Music, and Fanfare randomization reenabled
* move OoT data files into the worlds folder
* move Compress and Decompress into oot data folder
* Replace get_all_state with custom method to avoid the cache
* OoT ROM: increment item counter before setting incoming item/player values to 0, preventing desync issues
* set data_version to 0
* make Kokiri Sword shuffle off by default
* reenable "Random Choice" for various cosmetic options
* kill Ruto's Letter turnin if open fountain
also fix for shopsanity
* place Buy Goron/Zora Tunic first in shop shuffle
* make ice traps appear as other items instead of breaking generation
* managed to break ice traps on non-major-only
* only handle ice traps if they are on
* fix shopsanity for non-oot games, and write player name instead of player number
* light arrows hint uses player name instead of player number
* Reenable "skip child zelda" option
* fix entrances_based_rules
* fix ganondorf hint if starting with light arrows
* fix dungeonitem shuffle and shopsanity interaction
* remove has_all_of, has_any_of, count_of in BaseClasses, replace usage with has_all, has_any, has_group
* force local giveable item on ZL if skip_child_zelda and shuffle_song_items is any
* keep bosses and bombchu bowling chus out of data package
* revert workaround for infinite recursion and fix it properly
* fix shared shop id caches during patching process
* fix shop text box overflows, as much as possible
* add default oot host.yaml option
* add .apz5, .n64, .z64 to gitignore
* Properly document and name all (functioning) OOT options
* clean up some imports
* remove unnecessary files from oot's data
* fix typo in gitignore
* readd the Compress and Decompress utilities, since they are needed for generation
* cleanup of imports and some minor optimizations
* increase shop offset for item IDs to 0xCB
* remove shop item AP ids entirely
* prevent triforce pieces for other players from being received by yourself
* add "excluded" property to Location
* Hint system adapted and reenabled; hints still unseeded
* make hints deterministic with lists instead of sets
* do not allow hints to point to Light Arrows on non-vanilla bridge
* foreign locations hint as their full name in OoT rather than their region
* checkedLocations now stores hint names by player ID, so that the same location in different worlds can have hints associated
* consolidate versioning in Utils
* ice traps appear as major items rather than any progression item
* set prescription and claim check as defaults for adult trade item settings
* add oot options to playerSettings
* allow case-insensitive logic tricks in yaml
* fix oot shopsanity option formatting
* Write OoT override info even if local item, enabling local checks to show up immediately in the client
* implement CollectionState.can_live_dmg for oot glitched logic
* filter item names for invalid characters when patching shops
* make ice traps appear according to the settings of the world they are shuffled into, rather than the original world
* set hidden-spoiler items and locations with Shop items to events
* make GF carpenters, Gerudo Card, Malon, ZL, and Impa events if the relevant settings are enabled, preventing them from appearing in the client on game start
* Fix oot Glitched and No Logic generation
* fix indenting
* Greatly reduce displayed cosmetic options
* Change oot data version to 1
* add apz5 distribution to webhost
* print player name if an ALttP dungeon contains a good item for OoT world
* delete unneeded commented code
* remove OcarinaSongs import to satisfy lint
											 
										 
										
											2021-09-02 08:35:05 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								            o r  ( g e r u d o _ f o r t r e s s  ! =  ' n o r m a l '  a n d  g e r u d o _ f o r t r e s s  ! =  ' f a s t ' ) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  M i r r o r  s h i e l d  d o e s  n o t  c o u n t  b e c a u s e  i t  c a n n o t  r e f l e c t  s c r u b  a t t a c k . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_shield" :  "(is_adult and Hylian_Shield) or (is_child and Deku_Shield)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_shield" :  "(is_adult and (Hylian_Shield or Mirror_Shield)) or (is_child and Deku_Shield)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_mega" :  "has_explosives and can_shield" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_isg" :  "can_shield and (is_adult or Sticks or Kokiri_Sword)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_hover" :  "can_mega and can_isg" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_weirdshot" :  "can_mega and can_use(Hookshot)" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_jumpslash" :  "is_adult or Sticks or Kokiri_Sword" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    #  B r i d g e  R e q u i r e m e n t s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_all_stones" :  "Kokiri_Emerald and Goron_Ruby and Zora_Sapphire" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "has_all_medallions" :  "Forest_Medallion and Fire_Medallion and Water_Medallion and Shadow_Medallion and Spirit_Medallion and Light_Medallion" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_build_rainbow_bridge" :  " ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( b r i d g e  = =  ' o p e n ' )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( b r i d g e  = =  ' v a n i l l a '  a n d  S h a d o w _ M e d a l l i o n  a n d  S p i r i t _ M e d a l l i o n  a n d  L i g h t _ A r r o w s )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( b r i d g e  = =  ' s t o n e s '  a n d  _ o o t _ h a s _ s t o n e s ( b r i d g e _ s t o n e s ) )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( b r i d g e  = =  ' m e d a l l i o n s '  a n d  _ o o t _ h a s _ m e d a l l i o n s ( b r i d g e _ m e d a l l i o n s ) )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( b r i d g e  = =  ' d u n g e o n s '  a n d  _ o o t _ h a s _ d u n g e o n _ r e w a r d s ( b r i d g e _ r e w a r d s ) )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( b r i d g e  = =  ' t o k e n s '  a n d  ( G o l d _ S k u l l t u l a _ T o k e n ,  b r i d g e _ t o k e n s ) ) ) " , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    "can_trigger_lacs" :  " ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( l a c s _ c o n d i t i o n  = =  ' v a n i l l a '  a n d  S h a d o w _ M e d a l l i o n  a n d  S p i r i t _ M e d a l l i o n )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( l a c s _ c o n d i t i o n  = =  ' s t o n e s '  a n d  _ o o t _ h a s _ s t o n e s ( l a c s _ s t o n e s ) )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( l a c s _ c o n d i t i o n  = =  ' m e d a l l i o n s '  a n d  _ o o t _ h a s _ m e d a l l i o n s ( l a c s _ m e d a l l i o n s ) )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( l a c s _ c o n d i t i o n  = =  ' d u n g e o n s '  a n d  _ o o t _ h a s _ d u n g e o n _ r e w a r d s ( l a c s _ r e w a r d s ) )  o r 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        ( l a c s _ c o n d i t i o n  = =  ' t o k e n s '  a n d  ( G o l d _ S k u l l t u l a _ T o k e n ,  l a c s _ t o k e n s ) ) ) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								}