80 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import TYPE_CHECKING
 | |
| from worlds.generic.Rules import set_rule
 | |
| 
 | |
| if TYPE_CHECKING:
 | |
|     from . import FaxanaduWorld
 | |
| 
 | |
| 
 | |
| def can_buy_in_eolis(state, player):
 | |
|     # Sword or Deluge so we can farm for gold.
 | |
|     # Ring of Elf so we can get 1500 from the King.
 | |
|     return state.has_any(["Progressive Sword", "Deluge", "Ring of Elf"], player)
 | |
| 
 | |
| 
 | |
| def has_any_magic(state, player):
 | |
|     return state.has_any(["Deluge", "Thunder", "Fire", "Death", "Tilte"], player)
 | |
| 
 | |
| 
 | |
| def set_rules(faxanadu_world: "FaxanaduWorld"):
 | |
|     player = faxanadu_world.player
 | |
|     multiworld = faxanadu_world.multiworld
 | |
| 
 | |
|     # Region rules
 | |
|     set_rule(multiworld.get_entrance("Eolis -> Path to Apolune", player), lambda state:
 | |
|              state.has_all(["Key Jack", "Progressive Sword"], player))  # You can't go far with magic only
 | |
|     set_rule(multiworld.get_entrance("Apolune -> Tower of Trunk", player), lambda state: state.has("Key Jack", player))
 | |
|     set_rule(multiworld.get_entrance("Apolune -> Path to Forepaw", player), lambda state: state.has("Mattock", player))
 | |
|     set_rule(multiworld.get_entrance("Trunk -> Joker Spring", player), lambda state: state.has("Key Joker", player))
 | |
|     set_rule(multiworld.get_entrance("Trunk -> Tower of Fortress", player), lambda state: state.has("Key Jack", player))
 | |
|     set_rule(multiworld.get_entrance("Trunk -> Path to Mascon", player), lambda state: 
 | |
|              state.has_all(["Key Queen", "Ring of Ruby", "Sky Spring Flow", "Tower of Fortress Spring Flow", "Joker Spring Flow"], player) and 
 | |
|              state.has("Progressive Sword", player, 2))
 | |
|     set_rule(multiworld.get_entrance("Path to Mascon -> Tower of Red Potion", player), lambda state:
 | |
|              state.has("Key Queen", player) and
 | |
|              state.has("Red Potion", player, 4))  # It's impossible to go through the tower of Red Potion without at least 1-2 potions. Give them 4 for good measure.
 | |
|     set_rule(multiworld.get_entrance("Path to Victim -> Tower of Suffer", player), lambda state: state.has("Key Queen", player))
 | |
|     set_rule(multiworld.get_entrance("Path to Victim -> Victim", player), lambda state: state.has("Unlock Wingboots", player))
 | |
|     set_rule(multiworld.get_entrance("Mist -> Useless Tower", player), lambda state:
 | |
|              state.has_all(["Key King", "Unlock Wingboots"], player))
 | |
|     set_rule(multiworld.get_entrance("Mist -> Tower of Mist", player), lambda state: state.has("Key King", player))
 | |
|     set_rule(multiworld.get_entrance("Mist -> Path to Conflate", player), lambda state: state.has("Key Ace", player))
 | |
|     set_rule(multiworld.get_entrance("Path to Conflate -> Helm Branch", player), lambda state: state.has("Key King", player))
 | |
|     set_rule(multiworld.get_entrance("Path to Conflate -> Branches", player), lambda state: state.has("Key King", player))
 | |
|     set_rule(multiworld.get_entrance("Daybreak -> Dartmoor Castle", player), lambda state: state.has("Ring of Dworf", player))
 | |
|     set_rule(multiworld.get_entrance("Dartmoor Castle -> Evil Fortress", player), lambda state: state.has("Demons Ring", player))
 | |
| 
 | |
|     # Location rules
 | |
|     set_rule(multiworld.get_location("Eolis Key Jack", player), lambda state: can_buy_in_eolis(state, player))
 | |
|     set_rule(multiworld.get_location("Eolis Hand Dagger", player), lambda state: can_buy_in_eolis(state, player))
 | |
|     set_rule(multiworld.get_location("Eolis Elixir", player), lambda state: can_buy_in_eolis(state, player))
 | |
|     set_rule(multiworld.get_location("Eolis Deluge", player), lambda state: can_buy_in_eolis(state, player))
 | |
|     set_rule(multiworld.get_location("Eolis Red Potion", player), lambda state: can_buy_in_eolis(state, player))
 | |
|     set_rule(multiworld.get_location("Path to Apolune Magic Shield", player), lambda state: state.has("Key King", player))  # Mid-late cost, make sure we've progressed
 | |
|     set_rule(multiworld.get_location("Path to Apolune Death", player), lambda state: state.has("Key Ace", player))  # Mid-late cost, make sure we've progressed
 | |
|     set_rule(multiworld.get_location("Tower of Trunk Hidden Mattock", player), lambda state:
 | |
|              # This is actually possible if the monster drop into the stairs and kill it with dagger. But it's a "pro move"
 | |
|              state.has("Deluge", player, 1) or
 | |
|              state.has("Progressive Sword", player, 2))
 | |
|     set_rule(multiworld.get_location("Path to Forepaw Glove", player), lambda state:
 | |
|              state.has_all(["Deluge", "Unlock Wingboots"], player))
 | |
|     set_rule(multiworld.get_location("Trunk Red Potion", player), lambda state: state.has("Unlock Wingboots", player))
 | |
|     set_rule(multiworld.get_location("Sky Spring", player), lambda state: state.has("Unlock Wingboots", player))
 | |
|     set_rule(multiworld.get_location("Tower of Fortress Spring", player), lambda state: state.has("Spring Elixir", player))
 | |
|     set_rule(multiworld.get_location("Tower of Fortress Guru", player), lambda state: state.has("Sky Spring Flow", player))
 | |
|     set_rule(multiworld.get_location("Tower of Suffer Hidden Wingboots", player), lambda state: 
 | |
|              state.has("Deluge", player) or
 | |
|              state.has("Progressive Sword", player, 2))
 | |
|     set_rule(multiworld.get_location("Misty House", player), lambda state: state.has("Black Onyx", player))
 | |
|     set_rule(multiworld.get_location("Misty Doctor Office", player), lambda state: has_any_magic(state, player))
 | |
|     set_rule(multiworld.get_location("Conflate Guru", player), lambda state: state.has("Progressive Armor", player, 3))
 | |
|     set_rule(multiworld.get_location("Branches Hidden Mattock", player), lambda state: state.has("Unlock Wingboots", player))
 | |
|     set_rule(multiworld.get_location("Path to Daybreak Glove", player), lambda state: state.has("Unlock Wingboots", player))
 | |
|     set_rule(multiworld.get_location("Dartmoor Castle Hidden Hourglass", player), lambda state: state.has("Unlock Wingboots", player))
 | |
|     set_rule(multiworld.get_location("Dartmoor Castle Hidden Red Potion", player), lambda state: has_any_magic(state, player))
 | |
|     set_rule(multiworld.get_location("Fraternal Castle Guru", player), lambda state: state.has("Progressive Sword", player, 4))
 | |
|     set_rule(multiworld.get_location("Fraternal Castle Shop Hidden Ointment", player), lambda state: has_any_magic(state, player))
 | |
| 
 | |
|     if faxanadu_world.options.require_dragon_slayer.value:
 | |
|         set_rule(multiworld.get_location("Evil One", player), lambda state: 
 | |
|                  state.has_all_counts({"Progressive Sword": 4, "Progressive Armor": 3, "Progressive Shield": 4}, player))
 | 
