97 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			97 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from BaseClasses import MultiWorld
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from .Items import exclusionItem_table
							 | 
						||
| 
								 | 
							
								from .Locations import STT_Checks, exclusion_table
							 | 
						||
| 
								 | 
							
								from .Names import LocationName, ItemName
							 | 
						||
| 
								 | 
							
								from ..generic.Rules import add_rule, forbid_items, set_rule
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def set_rules(world: MultiWorld, player: int):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.RoxasDataMagicBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_dataroxas(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.DemyxDataAPBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_datademyx(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.SaixDataDefenseBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_datasaix(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.XaldinDataDefenseBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_dataxaldin(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.XemnasDataPowerBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_dataxemnas(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.XigbarDataDefenseBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_dataxigbar(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.VexenDataLostIllusion, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_dataaxel(player))
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.LuxordDataAPBoost, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_dataluxord(player))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for slot, weapon in exclusion_table["WeaponSlots"].items():
							 | 
						||
| 
								 | 
							
								        add_rule(world.get_location(slot, player), lambda state: state.has(weapon, player))
							 | 
						||
| 
								 | 
							
								    formLogicTable = {
							 | 
						||
| 
								 | 
							
								        ItemName.ValorForm:     [LocationName.Valorlvl4,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Valorlvl5,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Valorlvl6,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Valorlvl7],
							 | 
						||
| 
								 | 
							
								        ItemName.WisdomForm:    [LocationName.Wisdomlvl4,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Wisdomlvl5,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Wisdomlvl6,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Wisdomlvl7],
							 | 
						||
| 
								 | 
							
								        ItemName.LimitForm:     [LocationName.Limitlvl4,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Limitlvl5,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Limitlvl6,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Limitlvl7],
							 | 
						||
| 
								 | 
							
								        ItemName.MasterForm:    [LocationName.Masterlvl4,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Masterlvl5,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Masterlvl6,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Masterlvl7],
							 | 
						||
| 
								 | 
							
								        ItemName.FinalForm:     [LocationName.Finallvl4,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Finallvl5,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Finallvl6,
							 | 
						||
| 
								 | 
							
								                                 LocationName.Finallvl7]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for form in formLogicTable:
							 | 
						||
| 
								 | 
							
								        for i in range(4):
							 | 
						||
| 
								 | 
							
								            location = world.get_location(formLogicTable[form][i], player)
							 | 
						||
| 
								 | 
							
								            set_rule(location, lambda state, i=i + 1, form=form: state.kh_amount_of_forms(player, i, form))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if world.Goal[player] == "three_proofs":
							 | 
						||
| 
								 | 
							
								        add_rule(world.get_location(LocationName.FinalXemnas, player),
							 | 
						||
| 
								 | 
							
								                 lambda state: state.kh_three_proof_unlocked(player))
							 | 
						||
| 
								 | 
							
								        if world.FinalXemnas[player]:
							 | 
						||
| 
								 | 
							
								            world.completion_condition[player] = lambda state: state.kh_victory(player)
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            world.completion_condition[player] = lambda state: state.kh_three_proof_unlocked(player)
							 | 
						||
| 
								 | 
							
								    # lucky emblem hunt
							 | 
						||
| 
								 | 
							
								    elif world.Goal[player] == "lucky_emblem_hunt":
							 | 
						||
| 
								 | 
							
								        add_rule(world.get_location(LocationName.FinalXemnas, player),
							 | 
						||
| 
								 | 
							
								                 lambda state: state.kh_lucky_emblem_unlocked(player, world.LuckyEmblemsRequired[player].value))
							 | 
						||
| 
								 | 
							
								        if world.FinalXemnas[player]:
							 | 
						||
| 
								 | 
							
								            world.completion_condition[player] = lambda state: state.kh_victory(player)
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            world.completion_condition[player] = lambda state: state.kh_lucky_emblem_unlocked(player, world.LuckyEmblemsRequired[player].value)
							 | 
						||
| 
								 | 
							
								    # hitlist if == 2
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        add_rule(world.get_location(LocationName.FinalXemnas, player),
							 | 
						||
| 
								 | 
							
								                 lambda state: state.kh_hitlist(player, world.BountyRequired[player].value))
							 | 
						||
| 
								 | 
							
								        if world.FinalXemnas[player]:
							 | 
						||
| 
								 | 
							
								            world.completion_condition[player] = lambda state: state.kh_victory(player)
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            world.completion_condition[player] = lambda state: state.kh_hitlist(player, world.BountyRequired[player].value)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #  Forbid Abilities on popups due to game limitations
							 | 
						||
| 
								 | 
							
								    for location in exclusion_table["Popups"]:
							 | 
						||
| 
								 | 
							
								        forbid_items(world.get_location(location, player), exclusionItem_table["Ability"])
							 | 
						||
| 
								 | 
							
								        forbid_items(world.get_location(location, player), exclusionItem_table["StatUps"])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for location in STT_Checks:
							 | 
						||
| 
								 | 
							
								        forbid_items(world.get_location(location, player), exclusionItem_table["StatUps"])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Santa's house also breaks with stat ups
							 | 
						||
| 
								 | 
							
								    for location in {LocationName.SantasHouseChristmasTownMap, LocationName.SantasHouseAPBoost}:
							 | 
						||
| 
								 | 
							
								        forbid_items(world.get_location(location, player), exclusionItem_table["StatUps"])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    add_rule(world.get_location(LocationName.TransporttoRemembrance, player),
							 | 
						||
| 
								 | 
							
								             lambda state: state.kh_transport(player))
							 |