41 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from ..generic.Rules import set_rule, add_rule
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from graph.vanilla.graph_locations import locationsDict
							 | 
						||
| 
								 | 
							
								from graph.graph_utils import vanillaTransitions, getAccessPoint
							 | 
						||
| 
								 | 
							
								from logic.logic import Logic
							 | 
						||
| 
								 | 
							
								from rom.rom_patches import RomPatches
							 | 
						||
| 
								 | 
							
								from utils.doorsmanager import DoorsManager
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def evalSMBool(smbool, maxDiff):
							 | 
						||
| 
								 | 
							
								    return smbool.bool == True and smbool.difficulty <= maxDiff
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def add_accessFrom_rule(location, player, accessFrom):
							 | 
						||
| 
								 | 
							
								    add_rule(location, lambda state: any((state.can_reach(accessName, player=player) and evalSMBool(rule(state.smbm[player]), state.smbm[player].maxDiff)) for accessName, rule in accessFrom.items()))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def add_postAvailable_rule(location, player, func):
							 | 
						||
| 
								 | 
							
								    add_rule(location, lambda state: evalSMBool(func(state.smbm[player]), state.smbm[player].maxDiff))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def set_available_rule(location, player, func):
							 | 
						||
| 
								 | 
							
								    set_rule(location, lambda state: evalSMBool(func(state.smbm[player]), state.smbm[player].maxDiff))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def set_entrance_rule(entrance, player, func):
							 | 
						||
| 
								 | 
							
								    set_rule(entrance, lambda state: evalSMBool(func(state.smbm[player]), state.smbm[player].maxDiff))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def add_entrance_rule(entrance, player, func):
							 | 
						||
| 
								 | 
							
								    add_rule(entrance, lambda state: evalSMBool(func(state.smbm[player]), state.smbm[player].maxDiff))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def set_rules(world, player):
							 | 
						||
| 
								 | 
							
								    world.completion_condition[player] = lambda state: state.has('Mother Brain', player)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for key, value in locationsDict.items():
							 | 
						||
| 
								 | 
							
								        location = world.get_location(key, player)
							 | 
						||
| 
								 | 
							
								        set_available_rule(location, player, value.Available)
							 | 
						||
| 
								 | 
							
								        if value.AccessFrom is not None:
							 | 
						||
| 
								 | 
							
								            add_accessFrom_rule(location, player, value.AccessFrom)
							 | 
						||
| 
								 | 
							
								        if value.PostAvailable is not None:
							 | 
						||
| 
								 | 
							
								            add_postAvailable_rule(location, player, value.PostAvailable)
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								    for accessPoint in Logic.accessPoints:
							 | 
						||
| 
								 | 
							
								        for key, value1 in accessPoint.intraTransitions.items():
							 | 
						||
| 
								 | 
							
								            set_entrance_rule(world.get_entrance(accessPoint.Name + "->" + key, player), player, value1)
							 |