1- from rule_builder .rules import And , Or , CanReachRegion
1+ from rule_builder .field_resolvers import FromOption
2+ from rule_builder .rules import And , Or , CanReachRegion , AtLeast
23from .Rulebuilder import *
34from ..Constants import *
5+ from ..Regions import GASHA_SPOT_REGIONS
46from ...Options import OracleOfSeasonsLogicDifficulty , OracleOfSeasonsDefaultSeedType , OracleOfSeasonsMasterKeys , OracleOfSeasonsDungeonShuffle , \
57 OracleOfSeasonsRemoveD0AltEntrance , OracleOfSeasonsRemoveD2AltEntrance , OracleOfSeasonsAnimalCompanion , OracleOfSeasonsLostWoodsItemSequence , \
6- OracleOfSeasonsLostWoodsMainSequence , OracleOfSeasonsHoronSeason
8+ OracleOfSeasonsLostWoodsMainSequence , OracleOfSeasonsHoronSeason , OracleOfSeasonsRequiredEssences , OracleOfSeasonsTreehouseOldManRequirement , \
9+ OracleOfSeasonsTarmGateRequirement , OracleOfSeasonsGoldenBeastsRequirement
710
811
912# Items predicates ############################################################
@@ -225,7 +228,7 @@ def oos_is_companion_dimitri() -> Rule:
225228
226229
227230def oos_is_default_season (area_name : str , season : int , is_season : bool = True ) -> Rule :
228- return Season ( area_name , season , is_season )
231+ return from_world_field ( f"default_seasons. { area_name } " , season , "eq" if is_season else "ne" )
229232
230233
231234def oos_can_remove_season (season : int ) -> Rule :
@@ -240,15 +243,15 @@ def oos_has_essences(target_count: int) -> Rule:
240243
241244
242245def oos_has_essences_for_maku_seed () -> Rule :
243- return HasGroupOption ("Essences" , "required_essences" )
246+ return HasGroup ("Essences" , FromOption ( OracleOfSeasonsRequiredEssences ) )
244247
245248
246249def oos_has_essences_for_treehouse () -> Rule :
247- return HasGroupOption ("Essences" , "treehouse_old_man_requirement" )
250+ return HasGroup ("Essences" , FromOption ( OracleOfSeasonsTreehouseOldManRequirement ) )
248251
249252
250253def oos_has_required_jewels () -> Rule :
251- return HasGroupOption ("Jewels" , "tarm_gate_required_jewels" )
254+ return HasGroup ("Jewels" , FromOption ( OracleOfSeasonsTarmGateRequirement ) )
252255
253256
254257def oos_can_reach_lost_woods_pedestal (allow_default : bool = False ) -> Rule :
@@ -280,14 +283,14 @@ def oos_can_complete_lost_woods_main_sequence(allow_default: bool = False) -> Ru
280283
281284
282285def oos_can_beat_required_golden_beasts () -> Rule :
283- return HasFromListOption ("_beat_golden_darknut" , "_beat_golden_lynel" , "_beat_golden_moblin" , "_beat_golden_octorok" ,
284- option_name = "golden_beasts_requirement" )
286+ return HasFromList ("_beat_golden_darknut" , "_beat_golden_lynel" , "_beat_golden_moblin" , "_beat_golden_octorok" ,
287+ count = FromOption ( OracleOfSeasonsGoldenBeastsRequirement ) )
285288
286289
287290def oos_can_complete_d11_puzzle () -> Rule :
288291 return Or (
289292 from_option (OracleOfSeasonsDungeonShuffle , OracleOfSeasonsDungeonShuffle .option_false ),
290- CanReachNumRegions ([ f"enter d{ i } " for i in range (1 , 9 )], 7 ) # And then deduce the last
293+ AtLeast ( 7 , * [ CanReachRegion ( f"enter d{ i } " ) for i in range (1 , 9 )]) # And then deduce the last
291294 )
292295
293296
@@ -298,7 +301,11 @@ def oos_has_rupees_for_shop(shop_name: str) -> Rule:
298301 oos_option_hard_logic (),
299302 oos_has_shovel ()
300303 ),
301- HasRupeesForShop (shop_name )
304+ from_world_field (f"shop_rupee_requirements.{ shop_name } " , 0 , "eq" ),
305+ And (
306+ oos_can_farm_rupees (),
307+ Has ("Rupees" , FromWorldAttr (f"shop_rupee_requirements.{ shop_name } " ))
308+ )
302309 )
303310
304311
@@ -311,7 +318,16 @@ def oos_can_farm_rupees() -> Rule:
311318
312319
313320def oos_can_buy_market () -> Rule :
314- return HasOresForShop ()
321+ return Or (
322+ from_world_field (f"shop_prices.subrosianMarket" , 0 , "eq" ),
323+ And (
324+ oos_can_farm_ore_chunks (),
325+ Or (
326+ Has ("Ore Chunks" , FromWorldAttr (f"shop_prices.subrosianMarket" )),
327+ from_option (OracleOfSeasonsGoldenOreSpotsShuffle , OracleOfSeasonsGoldenOreSpotsShuffle .option_false , "eq" ),
328+ )
329+ )
330+ )
315331
316332
317333def oos_can_farm_ore_chunks () -> Rule :
@@ -1324,7 +1340,7 @@ def oos_roosters(region: str, any_amount: int = 0, top_amount: int = 0, bottom_a
13241340 oos_roosters ("horon" , any_amount + 1 , top_amount , bottom_amount , set (visited_regions )),
13251341 oos_season_in_eyeglass_lake (SEASON_WINTER ),
13261342 Or (
1327- Season ("EYEGLASS_LAKE" , SEASON_SUMMER , True ),
1343+ oos_is_default_season ("EYEGLASS_LAKE" , SEASON_SUMMER , True ),
13281344 oos_can_remove_season (SEASON_SUMMER )
13291345 ),
13301346 oos_can_swim (True )
0 commit comments