Add Ori and the Blind Forest
TODO: Mapstone counting, Open, OpenWorld, connection rules, goals
This commit is contained in:
parent
20b173453d
commit
5c8a076790
|
@ -0,0 +1,10 @@
|
|||
# generated by https://github.com/Berserker66/ori_rando_server
|
||||
# do not edit manually
|
||||
|
||||
from typing import Dict
|
||||
|
||||
item_table: Dict[str, int] = \
|
||||
{'EX100': 262144, 'AC': 262145, 'Bash': 262146, 'HC': 262147, 'Plant': 262148, 'MapStone': 262149, 'ChargeFlame': 262150, 'ChargeJump': 262151, 'Climb': 262152, 'MS': 262153, 'Dash': 262154, 'EC': 262155, 'EX200': 262156, 'DoubleJump': 262157, 'EX15': 262158, 'Wind': 262159, 'KS': 262160, 'Water': 262161, 'Glide': 262162, 'Grenade': 262163, 'ForlornKey': 262164, 'CS': 262165, 'Stomp': 262166, 'HoruKey': 262167, 'WallJump': 262168, 'GinsoKey': 262169}
|
||||
|
||||
default_pool: Dict[str, int] = \
|
||||
{'EX100': 53, 'AC': 33, 'Bash': 1, 'HC': 12, 'Plant': 24, 'MapStone': 9, 'ChargeFlame': 1, 'ChargeJump': 1, 'Climb': 1, 'MS': 9, 'Dash': 1, 'EC': 14, 'EX200': 29, 'DoubleJump': 1, 'EX15': 6, 'Wind': 1, 'KS': 40, 'Water': 1, 'Glide': 1, 'Grenade': 1, 'ForlornKey': 1, 'CS': 8, 'Stomp': 1, 'HoruKey': 1, 'WallJump': 1, 'GinsoKey': 1}
|
|
@ -0,0 +1,262 @@
|
|||
# generated by https://github.com/Berserker66/ori_rando_server
|
||||
# do not edit manually
|
||||
|
||||
from .Types import *
|
||||
|
||||
locations_data = \
|
||||
{'AboveChargeFlameTreeExp': Location(code=262144, vanilla_item='EX100'),
|
||||
'AboveChargeJumpAbilityCell': Location(code=262145, vanilla_item='AC'),
|
||||
'AboveFourthHealth': Location(code=262146, vanilla_item='AC'),
|
||||
'AboveGrottoTeleporterExp': Location(code=262147, vanilla_item='EX100'),
|
||||
'BashAreaExp': Location(code=262148, vanilla_item='EX100'),
|
||||
'BashSkillTree': Location(code=262149, vanilla_item='SKBash'),
|
||||
'BelowGrottoTeleporterHealthCell': Location(code=262150, vanilla_item='HC'),
|
||||
'BelowGrottoTeleporterPlant': Location(code=262151, vanilla_item='Plant'),
|
||||
'BlackrootBoulderExp': Location(code=262152, vanilla_item='EX100'),
|
||||
'BlackrootMap': Location(code=262153, vanilla_item='MapStone'),
|
||||
'BlackrootTeleporterHealthCell': Location(code=262154, vanilla_item='HC'),
|
||||
'ChargeFlameAreaExp': Location(code=262155, vanilla_item='EX100'),
|
||||
'ChargeFlameAreaPlant': Location(code=262156, vanilla_item='Plant'),
|
||||
'ChargeFlameSkillTree': Location(code=262157, vanilla_item='SKChargeFlame'),
|
||||
'ChargeJumpSkillTree': Location(code=262158, vanilla_item='SKChargeJump'),
|
||||
'ClimbSkillTree': Location(code=262159, vanilla_item='SKClimb'),
|
||||
'DashAreaAbilityCell': Location(code=262160, vanilla_item='AC'),
|
||||
'DashAreaMapstone': Location(code=262161, vanilla_item='MS'),
|
||||
'DashAreaOrbRoomExp': Location(code=262162, vanilla_item='EX100'),
|
||||
'DashAreaPlant': Location(code=262163, vanilla_item='Plant'),
|
||||
'DashAreaRoofExp': Location(code=262164, vanilla_item='EX100'),
|
||||
'DashSkillTree': Location(code=262165, vanilla_item='SKDash'),
|
||||
'DeathGauntletEnergyCell': Location(code=262166, vanilla_item='EC'),
|
||||
'DeathGauntletExp': Location(code=262167, vanilla_item='EX100'),
|
||||
'DeathGauntletRoofHealthCell': Location(code=262168, vanilla_item='HC'),
|
||||
'DeathGauntletRoofPlant': Location(code=262169, vanilla_item='Plant'),
|
||||
'DeathGauntletStompSwim': Location(code=262170, vanilla_item='EX200'),
|
||||
'DeathGauntletSwimEnergyDoor': Location(code=262171, vanilla_item='AC'),
|
||||
'DoorWarpExp': Location(code=262172, vanilla_item='EX200'),
|
||||
'DoubleJumpAreaExp': Location(code=262173, vanilla_item='EX100'),
|
||||
'DoubleJumpSkillTree': Location(code=262174, vanilla_item='SKDoubleJump'),
|
||||
'FarLeftGumoHideoutExp': Location(code=262175, vanilla_item='EX100'),
|
||||
'FirstPickup': Location(code=262176, vanilla_item='EX15'),
|
||||
'ForlornEntranceExp': Location(code=262177, vanilla_item='EX200'),
|
||||
'ForlornEscape': Location(code=262178, vanilla_item='EVWind'),
|
||||
'ForlornHiddenSpiderExp': Location(code=262179, vanilla_item='EX100'),
|
||||
'ForlornKeystone1': Location(code=262180, vanilla_item='KS'),
|
||||
'ForlornKeystone2': Location(code=262181, vanilla_item='KS'),
|
||||
'ForlornKeystone3': Location(code=262182, vanilla_item='KS'),
|
||||
'ForlornKeystone4': Location(code=262183, vanilla_item='KS'),
|
||||
'ForlornMap': Location(code=262184, vanilla_item='MapStone'),
|
||||
'ForlornPlant': Location(code=262185, vanilla_item='Plant'),
|
||||
'FourthHealthCell': Location(code=262186, vanilla_item='HC'),
|
||||
'FronkeyFight': Location(code=262187, vanilla_item='EX15'),
|
||||
'FronkeyWalkRoof': Location(code=262188, vanilla_item='EX200'),
|
||||
'GinsoEscapeExit': Location(code=262189, vanilla_item='EVWater'),
|
||||
'GinsoEscapeHangingExp': Location(code=262190, vanilla_item='EX100'),
|
||||
'GinsoEscapeJumpPadExp': Location(code=262191, vanilla_item='EX100'),
|
||||
'GinsoEscapeProjectileExp': Location(code=262192, vanilla_item='EX100'),
|
||||
'GinsoEscapeSpiderExp': Location(code=262193, vanilla_item='EX200'),
|
||||
'GladesGrenadePool': Location(code=262194, vanilla_item='EX200'),
|
||||
'GladesGrenadeTree': Location(code=262195, vanilla_item='AC'),
|
||||
'GladesKeystone1': Location(code=262196, vanilla_item='KS'),
|
||||
'GladesKeystone2': Location(code=262197, vanilla_item='KS'),
|
||||
'GladesLaser': Location(code=262198, vanilla_item='EC'),
|
||||
'GladesLaserGrenade': Location(code=262199, vanilla_item='AC'),
|
||||
'GladesMainPool': Location(code=262200, vanilla_item='EX100'),
|
||||
'GladesMainPoolDeep': Location(code=262201, vanilla_item='EC'),
|
||||
'GladesMap': Location(code=262202, vanilla_item='MapStone'),
|
||||
'GladesMapKeystone': Location(code=262203, vanilla_item='KS'),
|
||||
'GlideSkillFeather': Location(code=262204, vanilla_item='SKGlide'),
|
||||
'GrenadeAreaAbilityCell': Location(code=262205, vanilla_item='AC'),
|
||||
'GrenadeAreaExp': Location(code=262206, vanilla_item='EX100'),
|
||||
'GrenadeSkillTree': Location(code=262207, vanilla_item='SKGrenade'),
|
||||
'GrottoEnergyDoorHealthCell': Location(code=262208, vanilla_item='HC'),
|
||||
'GrottoEnergyDoorSwim': Location(code=262209, vanilla_item='EX100'),
|
||||
'GrottoHideoutFallAbilityCell': Location(code=262210, vanilla_item='AC'),
|
||||
'GrottoLasersRoofExp': Location(code=262211, vanilla_item='EX100'),
|
||||
'GrottoSwampDrainAccessExp': Location(code=262212, vanilla_item='EX100'),
|
||||
'GrottoSwampDrainAccessPlant': Location(code=262213, vanilla_item='Plant'),
|
||||
'GroveAboveSpiderWaterEnergyCell': Location(code=262214, vanilla_item='EC'),
|
||||
'GroveAboveSpiderWaterExp': Location(code=262215, vanilla_item='EX200'),
|
||||
'GroveAboveSpiderWaterHealthCell': Location(code=262216, vanilla_item='HC'),
|
||||
'GroveSpiderWaterSwim': Location(code=262217, vanilla_item='EX100'),
|
||||
'GroveWaterStompAbilityCell': Location(code=262218, vanilla_item='AC'),
|
||||
'GumoHideoutCrusherExp': Location(code=262219, vanilla_item='EX100'),
|
||||
'GumoHideoutCrusherKeystone': Location(code=262220, vanilla_item='KS'),
|
||||
'GumoHideoutEnergyCell': Location(code=262221, vanilla_item='EC'),
|
||||
'GumoHideoutLeftHangingExp': Location(code=262222, vanilla_item='EX15'),
|
||||
'GumoHideoutMap': Location(code=262223, vanilla_item='MapStone'),
|
||||
'GumoHideoutMapstone': Location(code=262224, vanilla_item='MS'),
|
||||
'GumoHideoutMiniboss': Location(code=262225, vanilla_item='KS'),
|
||||
'GumoHideoutRedirectAbilityCell': Location(code=262226, vanilla_item='AC'),
|
||||
'GumoHideoutRedirectEnergyCell': Location(code=262227, vanilla_item='EC'),
|
||||
'GumoHideoutRedirectExp': Location(code=262228, vanilla_item='EX200'),
|
||||
'GumoHideoutRedirectPlant': Location(code=262229, vanilla_item='Plant'),
|
||||
'GumoHideoutRightHangingExp': Location(code=262230, vanilla_item='EX15'),
|
||||
'GumoHideoutRockfallExp': Location(code=262231, vanilla_item='EX100'),
|
||||
'GumonSeal': Location(code=262232, vanilla_item='EVForlornKey'),
|
||||
'HollowGroveMap': Location(code=262233, vanilla_item='MapStone'),
|
||||
'HollowGroveMapPlant': Location(code=262234, vanilla_item='Plant'),
|
||||
'HollowGroveMapstone': Location(code=262235, vanilla_item='MS'),
|
||||
'HollowGroveTreeAbilityCell': Location(code=262236, vanilla_item='AC'),
|
||||
'HollowGroveTreePlant': Location(code=262237, vanilla_item='Plant'),
|
||||
'HoruFieldsAbilityCell': Location(code=262238, vanilla_item='AC'),
|
||||
'HoruFieldsEnergyCell': Location(code=262239, vanilla_item='EC'),
|
||||
'HoruFieldsHealthCell': Location(code=262240, vanilla_item='HC'),
|
||||
'HoruFieldsHiddenExp': Location(code=262241, vanilla_item='EX200'),
|
||||
'HoruFieldsPlant': Location(code=262242, vanilla_item='Plant'),
|
||||
'HoruL1': Location(code=262243, vanilla_item='CS'),
|
||||
'HoruL2': Location(code=262244, vanilla_item='CS'),
|
||||
'HoruL3': Location(code=262245, vanilla_item='CS'),
|
||||
'HoruL4': Location(code=262246, vanilla_item='CS'),
|
||||
'HoruL4ChaseExp': Location(code=262247, vanilla_item='EX200'),
|
||||
'HoruL4LowerExp': Location(code=262248, vanilla_item='EX200'),
|
||||
'HoruLavaDrainedLeftExp': Location(code=262249, vanilla_item='EX200'),
|
||||
'HoruLavaDrainedRightExp': Location(code=262250, vanilla_item='EX200'),
|
||||
'HoruMap': Location(code=262251, vanilla_item='MapStone'),
|
||||
'HoruR1': Location(code=262252, vanilla_item='CS'),
|
||||
'HoruR1EnergyCell': Location(code=262253, vanilla_item='EC'),
|
||||
'HoruR1HangingExp': Location(code=262254, vanilla_item='EX100'),
|
||||
'HoruR1Mapstone': Location(code=262255, vanilla_item='MS'),
|
||||
'HoruR2': Location(code=262256, vanilla_item='CS'),
|
||||
'HoruR3': Location(code=262257, vanilla_item='CS'),
|
||||
'HoruR3Plant': Location(code=262258, vanilla_item='Plant'),
|
||||
'HoruR4': Location(code=262259, vanilla_item='CS'),
|
||||
'HoruR4DrainedExp': Location(code=262260, vanilla_item='EX200'),
|
||||
'HoruR4LaserExp': Location(code=262261, vanilla_item='EX200'),
|
||||
'HoruR4StompExp': Location(code=262262, vanilla_item='EX200'),
|
||||
'HoruTeleporterExp': Location(code=262263, vanilla_item='EX200'),
|
||||
'IcelessExp': Location(code=262264, vanilla_item='EX100'),
|
||||
'InnerSwampDrainExp': Location(code=262265, vanilla_item='EX100'),
|
||||
'InnerSwampEnergyCell': Location(code=262266, vanilla_item='EC'),
|
||||
'InnerSwampHiddenSwimExp': Location(code=262267, vanilla_item='EX100'),
|
||||
'InnerSwampStompExp': Location(code=262268, vanilla_item='EX100'),
|
||||
'InnerSwampSwimLeftKeystone': Location(code=262269, vanilla_item='KS'),
|
||||
'InnerSwampSwimMapstone': Location(code=262270, vanilla_item='MS'),
|
||||
'InnerSwampSwimRightKeystone': Location(code=262271, vanilla_item='KS'),
|
||||
'KuroPerchExp': Location(code=262272, vanilla_item='EX200'),
|
||||
'LeftGladesExp': Location(code=262273, vanilla_item='EX15'),
|
||||
'LeftGladesHiddenExp': Location(code=262274, vanilla_item='EX15'),
|
||||
'LeftGladesKeystone': Location(code=262275, vanilla_item='KS'),
|
||||
'LeftGladesMapstone': Location(code=262276, vanilla_item='MS'),
|
||||
'LeftGrottoTeleporterExp': Location(code=262277, vanilla_item='EX200'),
|
||||
'LeftGumoHideoutExp': Location(code=262278, vanilla_item='EX100'),
|
||||
'LeftGumoHideoutHealthCell': Location(code=262279, vanilla_item='HC'),
|
||||
'LeftGumoHideoutLowerPlant': Location(code=262280, vanilla_item='Plant'),
|
||||
'LeftGumoHideoutSwim': Location(code=262281, vanilla_item='EX100'),
|
||||
'LeftGumoHideoutUpperPlant': Location(code=262282, vanilla_item='Plant'),
|
||||
'LeftSorrowAbilityCell': Location(code=262283, vanilla_item='AC'),
|
||||
'LeftSorrowEnergyCell': Location(code=262284, vanilla_item='EC'),
|
||||
'LeftSorrowGrenade': Location(code=262285, vanilla_item='EX200'),
|
||||
'LeftSorrowKeystone1': Location(code=262286, vanilla_item='KS'),
|
||||
'LeftSorrowKeystone2': Location(code=262287, vanilla_item='KS'),
|
||||
'LeftSorrowKeystone3': Location(code=262288, vanilla_item='KS'),
|
||||
'LeftSorrowKeystone4': Location(code=262289, vanilla_item='KS'),
|
||||
'LeftSorrowPlant': Location(code=262290, vanilla_item='Plant'),
|
||||
'LostGroveAbilityCell': Location(code=262291, vanilla_item='AC'),
|
||||
'LostGroveHiddenExp': Location(code=262292, vanilla_item='EX100'),
|
||||
'LostGroveLongSwim': Location(code=262293, vanilla_item='AC'),
|
||||
'LostGroveTeleporter': Location(code=262294, vanilla_item='EX100'),
|
||||
'LowerBlackrootAbilityCell': Location(code=262295, vanilla_item='AC'),
|
||||
'LowerBlackrootGrenadeThrow': Location(code=262296, vanilla_item='AC'),
|
||||
'LowerBlackrootLaserAbilityCell': Location(code=262297, vanilla_item='AC'),
|
||||
'LowerBlackrootLaserExp': Location(code=262298, vanilla_item='EX100'),
|
||||
'LowerGinsoHiddenExp': Location(code=262299, vanilla_item='EX100'),
|
||||
'LowerGinsoKeystone1': Location(code=262300, vanilla_item='KS'),
|
||||
'LowerGinsoKeystone2': Location(code=262301, vanilla_item='KS'),
|
||||
'LowerGinsoKeystone3': Location(code=262302, vanilla_item='KS'),
|
||||
'LowerGinsoKeystone4': Location(code=262303, vanilla_item='KS'),
|
||||
'LowerGinsoPlant': Location(code=262304, vanilla_item='Plant'),
|
||||
'LowerValleyExp': Location(code=262305, vanilla_item='EX100'),
|
||||
'LowerValleyMapstone': Location(code=262306, vanilla_item='MS'),
|
||||
'MistyAbilityCell': Location(code=262307, vanilla_item='AC'),
|
||||
'MistyEntranceStompExp': Location(code=262308, vanilla_item='EX100'),
|
||||
'MistyEntranceTreeExp': Location(code=262309, vanilla_item='EX100'),
|
||||
'MistyFrogNookExp': Location(code=262310, vanilla_item='EX100'),
|
||||
'MistyGrenade': Location(code=262311, vanilla_item='EX200'),
|
||||
'MistyKeystone1': Location(code=262312, vanilla_item='KS'),
|
||||
'MistyKeystone2': Location(code=262313, vanilla_item='KS'),
|
||||
'MistyKeystone3': Location(code=262314, vanilla_item='KS'),
|
||||
'MistyKeystone4': Location(code=262315, vanilla_item='KS'),
|
||||
'MistyMortarCorridorHiddenExp': Location(code=262316, vanilla_item='EX100'),
|
||||
'MistyMortarCorridorUpperExp': Location(code=262317, vanilla_item='EX100'),
|
||||
'MistyPlant': Location(code=262318, vanilla_item='Plant'),
|
||||
'MistyPostClimbAboveSpikePit': Location(code=262319, vanilla_item='EX200'),
|
||||
'MistyPostClimbSpikeCave': Location(code=262320, vanilla_item='EX100'),
|
||||
'MoonGrottoStompPlant': Location(code=262321, vanilla_item='Plant'),
|
||||
'OuterSwampAbilityCell': Location(code=262322, vanilla_item='AC'),
|
||||
'OuterSwampGrenadeExp': Location(code=262323, vanilla_item='EX200'),
|
||||
'OuterSwampHealthCell': Location(code=262324, vanilla_item='HC'),
|
||||
'OuterSwampMortarAbilityCell': Location(code=262325, vanilla_item='AC'),
|
||||
'OuterSwampMortarPlant': Location(code=262326, vanilla_item='Plant'),
|
||||
'OuterSwampStompExp': Location(code=262327, vanilla_item='EX100'),
|
||||
'OutsideForlornCliffExp': Location(code=262328, vanilla_item='EX200'),
|
||||
'OutsideForlornTreeExp': Location(code=262329, vanilla_item='EX100'),
|
||||
'OutsideForlornWaterExp': Location(code=262330, vanilla_item='EX100'),
|
||||
'RazielNo': Location(code=262331, vanilla_item='EX100'),
|
||||
'RightForlornHealthCell': Location(code=262332, vanilla_item='HC'),
|
||||
'RightForlornPlant': Location(code=262333, vanilla_item='Plant'),
|
||||
'SorrowEntranceAbilityCell': Location(code=262334, vanilla_item='AC'),
|
||||
'SorrowHealthCell': Location(code=262335, vanilla_item='HC'),
|
||||
'SorrowHiddenKeystone': Location(code=262336, vanilla_item='KS'),
|
||||
'SorrowLowerLeftKeystone': Location(code=262337, vanilla_item='KS'),
|
||||
'SorrowMainShaftKeystone': Location(code=262338, vanilla_item='KS'),
|
||||
'SorrowMap': Location(code=262339, vanilla_item='MapStone'),
|
||||
'SorrowMapstone': Location(code=262340, vanilla_item='MS'),
|
||||
'SorrowSpikeKeystone': Location(code=262341, vanilla_item='KS'),
|
||||
'SpiderSacEnergyCell': Location(code=262342, vanilla_item='EC'),
|
||||
'SpiderSacEnergyDoor': Location(code=262343, vanilla_item='AC'),
|
||||
'SpiderSacGrenadeDoor': Location(code=262344, vanilla_item='AC'),
|
||||
'SpiderSacHealthCell': Location(code=262345, vanilla_item='HC'),
|
||||
'SpiritCavernsAbilityCell': Location(code=262346, vanilla_item='AC'),
|
||||
'SpiritCavernsKeystone1': Location(code=262347, vanilla_item='KS'),
|
||||
'SpiritCavernsKeystone2': Location(code=262348, vanilla_item='KS'),
|
||||
'SpiritCavernsTopLeftKeystone': Location(code=262349, vanilla_item='KS'),
|
||||
'SpiritCavernsTopRightKeystone': Location(code=262350, vanilla_item='KS'),
|
||||
'StompAreaExp': Location(code=262351, vanilla_item='EX100'),
|
||||
'StompAreaGrenadeExp': Location(code=262352, vanilla_item='EX200'),
|
||||
'StompAreaRoofExp': Location(code=262353, vanilla_item='EX200'),
|
||||
'StompSkillTree': Location(code=262354, vanilla_item='SKStomp'),
|
||||
'Sunstone': Location(code=262355, vanilla_item='EVHoruKey'),
|
||||
'SunstonePlant': Location(code=262356, vanilla_item='Plant'),
|
||||
'SwampEntranceAbilityCell': Location(code=262357, vanilla_item='AC'),
|
||||
'SwampEntrancePlant': Location(code=262358, vanilla_item='Plant'),
|
||||
'SwampEntranceSwim': Location(code=262359, vanilla_item='EX200'),
|
||||
'SwampMap': Location(code=262360, vanilla_item='MapStone'),
|
||||
'SwampTeleporterAbilityCell': Location(code=262361, vanilla_item='AC'),
|
||||
'TopGinsoLeftLowerExp': Location(code=262362, vanilla_item='EX100'),
|
||||
'TopGinsoLeftUpperExp': Location(code=262363, vanilla_item='EX100'),
|
||||
'TopGinsoRightPlant': Location(code=262364, vanilla_item='Plant'),
|
||||
'UpperGinsoEnergyCell': Location(code=262365, vanilla_item='EC'),
|
||||
'UpperGinsoLowerKeystone': Location(code=262366, vanilla_item='KS'),
|
||||
'UpperGinsoRedirectLowerExp': Location(code=262367, vanilla_item='EX100'),
|
||||
'UpperGinsoRedirectUpperExp': Location(code=262368, vanilla_item='EX100'),
|
||||
'UpperGinsoRightKeystone': Location(code=262369, vanilla_item='KS'),
|
||||
'UpperGinsoUpperLeftKeystone': Location(code=262370, vanilla_item='KS'),
|
||||
'UpperGinsoUpperRightKeystone': Location(code=262371, vanilla_item='KS'),
|
||||
'UpperSorrowFarLeftKeystone': Location(code=262372, vanilla_item='KS'),
|
||||
'UpperSorrowFarRightKeystone': Location(code=262373, vanilla_item='KS'),
|
||||
'UpperSorrowLeftKeystone': Location(code=262374, vanilla_item='KS'),
|
||||
'UpperSorrowRightKeystone': Location(code=262375, vanilla_item='KS'),
|
||||
'UpperSorrowSpikeExp': Location(code=262376, vanilla_item='EX100'),
|
||||
'ValleyEntryAbilityCell': Location(code=262377, vanilla_item='AC'),
|
||||
'ValleyEntryGrenadeLongSwim': Location(code=262378, vanilla_item='EC'),
|
||||
'ValleyEntryTreeExp': Location(code=262379, vanilla_item='EX100'),
|
||||
'ValleyEntryTreePlant': Location(code=262380, vanilla_item='Plant'),
|
||||
'ValleyForlornApproachGrenade': Location(code=262381, vanilla_item='AC'),
|
||||
'ValleyForlornApproachMapstone': Location(code=262382, vanilla_item='MS'),
|
||||
'ValleyMainFACS': Location(code=262383, vanilla_item='AC'),
|
||||
'ValleyMainPlant': Location(code=262384, vanilla_item='Plant'),
|
||||
'ValleyMap': Location(code=262385, vanilla_item='MapStone'),
|
||||
'ValleyRightBirdStompCell': Location(code=262386, vanilla_item='AC'),
|
||||
'ValleyRightExp': Location(code=262387, vanilla_item='EX100'),
|
||||
'ValleyRightFastStomplessCell': Location(code=262388, vanilla_item='AC'),
|
||||
'ValleyRightSwimExp': Location(code=262389, vanilla_item='EX100'),
|
||||
'ValleyThreeBirdAbilityCell': Location(code=262390, vanilla_item='AC'),
|
||||
'WallJumpAreaEnergyCell': Location(code=262391, vanilla_item='EC'),
|
||||
'WallJumpAreaExp': Location(code=262392, vanilla_item='EX200'),
|
||||
'WallJumpSkillTree': Location(code=262393, vanilla_item='SKWallJump'),
|
||||
'WaterVein': Location(code=262394, vanilla_item='EVGinsoKey'),
|
||||
'WilhelmExp': Location(code=262395, vanilla_item='EX200')}
|
||||
|
||||
|
||||
|
||||
lookup_name_to_id = {location_name: location_data.code for location_name, location_data in locations_data.items()}
|
|
@ -0,0 +1,12 @@
|
|||
from .RulesData import location_rules
|
||||
from Options import Toggle
|
||||
|
||||
|
||||
options = {
|
||||
"open" : Toggle,
|
||||
"openworld": Toggle
|
||||
}
|
||||
|
||||
for logic_set in location_rules:
|
||||
if logic_set != "casual-core":
|
||||
options[logic_set.replace("-", "_")] = Toggle
|
|
@ -0,0 +1,251 @@
|
|||
# generated by https://github.com/Berserker66/ori_rando_server
|
||||
# do not edit manually
|
||||
|
||||
locations_by_region = \
|
||||
{'AboveChargeJumpArea': {'AboveChargeJumpAbilityCell'}, 'BashTree': {'BashAreaExp', 'BashSkillTree'},
|
||||
'BashTreeDoorClosed': set(), 'BashTreeDoorOpened': set(), 'BelowSunstoneArea': set(),
|
||||
'BlackrootDarknessRoom': {'DashAreaOrbRoomExp', 'DashAreaAbilityCell', 'DashAreaRoofExp'},
|
||||
'BlackrootGrottoConnection': {'BlackrootBoulderExp', 'BlackrootMap', 'BlackrootTeleporterHealthCell'},
|
||||
'ChargeFlameAreaPlantAccess': {'ChargeFlameAreaPlant'}, 'ChargeFlameAreaStump': set(),
|
||||
'ChargeFlameSkillTreeChamber': {'ChargeFlameSkillTree'}, 'ChargeJumpArea': {'ChargeJumpSkillTree'},
|
||||
'ChargeJumpDoor': set(), 'ChargeJumpDoorOpen': set(),
|
||||
'ChargeJumpDoorOpenLeft': {'UpperSorrowSpikeExp', 'UpperSorrowRightKeystone', 'UpperSorrowLeftKeystone',
|
||||
'UpperSorrowFarRightKeystone', 'UpperSorrowFarLeftKeystone'},
|
||||
'DashArea': {'DashAreaMapstone', 'DashSkillTree'}, 'DashPlantAccess': {'DashAreaPlant'},
|
||||
'DeathGauntlet': {'DeathGauntletEnergyCell', 'DeathGauntletStompSwim', 'DeathGauntletExp'},
|
||||
'DeathGauntletDoor': set(), 'DeathGauntletDoorOpened': set(), 'DeathGauntletMoat': {'DeathGauntletSwimEnergyDoor'},
|
||||
'DeathGauntletRoof': {'DeathGauntletRoofHealthCell'}, 'DeathGauntletRoofPlantAccess': {'DeathGauntletRoofPlant'},
|
||||
'DoubleJumpKeyDoor': set(), 'DoubleJumpKeyDoorOpened': {'DoubleJumpSkillTree', 'DoubleJumpAreaExp'},
|
||||
'ForlornGravityRoom': {'ForlornKeystone2', 'ForlornHiddenSpiderExp', 'ForlornKeystone1'},
|
||||
'ForlornInnerDoor': {'ForlornEntranceExp'}, 'ForlornKeyDoor': set(), 'ForlornLaserRoom': {'ForlornEscape'},
|
||||
'ForlornMapArea': {'ForlornMap', 'ForlornKeystone4'},
|
||||
'ForlornOrbPossession': {'ForlornKeystone2', 'ForlornHiddenSpiderExp', 'ForlornKeystone1', 'ForlornKeystone4',
|
||||
'ForlornKeystone3'}, 'ForlornOuterDoor': set(), 'ForlornPlantAccess': {'ForlornPlant'},
|
||||
'ForlornStompDoor': set(), 'ForlornTeleporter': {'ForlornKeystone3'}, 'GinsoEscape': set(),
|
||||
'GinsoEscapeComplete': {'GinsoEscapeExit', 'GinsoEscapeSpiderExp', 'GinsoEscapeProjectileExp',
|
||||
'GinsoEscapeJumpPadExp', 'GinsoEscapeHangingExp'}, 'GinsoInnerDoor': set(),
|
||||
'GinsoMiniBossDoor': {'LowerGinsoKeystone2', 'LowerGinsoKeystone1', 'LowerGinsoKeystone3', 'LowerGinsoKeystone4'},
|
||||
'GinsoOuterDoor': set(), 'GinsoTeleporter': set(), 'GladesLaserArea': {'GladesLaserGrenade', 'GladesLaser'},
|
||||
'GladesMain': {'FourthHealthCell', 'GladesMap', 'GladesMapKeystone'}, 'GladesMainAttic': {'AboveFourthHealth'},
|
||||
'GrenadeArea': {'GrenadeAreaAbilityCell', 'GrenadeAreaExp', 'GrenadeSkillTree'}, 'GrenadeAreaAccess': set(),
|
||||
'GumoHideout': {'GumoHideoutMapstone', 'GumoHideoutCrusherExp', 'GumoHideoutRightHangingExp',
|
||||
'GumoHideoutEnergyCell', 'GumoHideoutCrusherKeystone', 'GumoHideoutMap', 'GumoHideoutMiniboss'},
|
||||
'GumoHideoutRedirectArea': {'GumoHideoutRedirectAbilityCell', 'GumoHideoutRedirectPlant'},
|
||||
'GumoHideoutRedirectEnergyVault': {'GumoHideoutRedirectExp', 'GumoHideoutRedirectEnergyCell'},
|
||||
'HollowGrove': {'GroveWaterStompAbilityCell', 'HollowGroveTreeAbilityCell', 'HollowGroveMapPlant',
|
||||
'HoruFieldsHealthCell', 'HollowGroveMap', 'SwampTeleporterAbilityCell', 'HollowGroveMapstone',
|
||||
'HollowGroveTreePlant'}, 'HoruBasement': {'DoorWarpExp'}, 'HoruEscapeInnerDoor': set(),
|
||||
'HoruEscapeOuterDoor': set(), 'HoruFields': set(),
|
||||
'HoruFieldsPushBlock': {'HoruFieldsEnergyCell', 'HoruFieldsPlant', 'HoruFieldsHiddenExp', 'HoruFieldsAbilityCell'},
|
||||
'HoruInnerDoor': {'HoruLavaDrainedLeftExp', 'HoruLavaDrainedRightExp'},
|
||||
'HoruL4CutscenePeg': {'HoruL4', 'HoruL4LowerExp'}, 'HoruL4LavaChasePeg': {'HoruL4ChaseExp'},
|
||||
'HoruMapLedge': {'HoruMap'}, 'HoruOuterDoor': set(), 'HoruR1CutsceneTrigger': {'HoruR1EnergyCell', 'HoruR1'},
|
||||
'HoruR1MapstoneSecret': {'HoruR1Mapstone'}, 'HoruR3CutsceneTrigger': {'HoruR3'}, 'HoruR3ElevatorLever': set(),
|
||||
'HoruR3PlantCove': {'HoruR3Plant'}, 'HoruR4CutsceneTrigger': {'HoruR4DrainedExp', 'HoruR4'},
|
||||
'HoruR4PuzzleEntrance': {'HoruR4LaserExp'}, 'HoruR4StompHideout': {'HoruR4StompExp'},
|
||||
'HoruTeleporter': {'HoruTeleporterExp'}, 'Iceless': {'IcelessExp'}, 'InnerSwampAboveDrainArea': set(),
|
||||
'InnerSwampDrainBroken': {'InnerSwampDrainExp'}, 'InnerSwampSkyArea': {'InnerSwampEnergyCell'}, 'L1': {'HoruL1'},
|
||||
'L1InnerDoor': set(), 'L1OuterDoor': set(), 'L2': {'HoruL2'}, 'L2InnerDoor': set(), 'L2OuterDoor': set(),
|
||||
'L3': {'HoruL3'}, 'L3InnerDoor': set(), 'L3OuterDoor': set(), 'L4': set(), 'L4InnerDoor': set(),
|
||||
'L4OuterDoor': {'HoruLavaDrainedLeftExp'},
|
||||
'LeftGlades': {'WallJumpAreaEnergyCell', 'LeftGladesHiddenExp', 'WallJumpAreaExp', 'WallJumpSkillTree'},
|
||||
'LeftGumoHideout': {'FarLeftGumoHideoutExp', 'LeftGumoHideoutUpperPlant'},
|
||||
'LeftSorrow': {'LeftSorrowAbilityCell', 'LeftSorrowPlant', 'LeftSorrowGrenade'},
|
||||
'LeftSorrowKeystones': {'LeftSorrowEnergyCell', 'LeftSorrowKeystone1', 'LeftSorrowKeystone2',
|
||||
'LeftSorrowKeystone4', 'LeftSorrowKeystone3'}, 'LeftSorrowLowerDoor': set(),
|
||||
'LeftSorrowMiddleDoor': set(), 'LostGrove': {'LostGroveLongSwim'},
|
||||
'LostGroveExit': {'LostGroveTeleporter', 'LostGroveAbilityCell', 'LostGroveHiddenExp'},
|
||||
'LowerBlackroot': {'LowerBlackrootAbilityCell', 'LowerBlackrootLaserAbilityCell', 'LowerBlackrootGrenadeThrow',
|
||||
'LowerBlackrootLaserExp'}, 'LowerChargeFlameArea': {'ChargeFlameAreaExp'},
|
||||
'LowerGinsoTree': {'LowerGinsoPlant', 'LowerGinsoHiddenExp'},
|
||||
'LowerLeftGumoHideout': {'LeftGumoHideoutSwim', 'LeftGumoHideoutHealthCell', 'LeftGumoHideoutExp',
|
||||
'GumoHideoutLeftHangingExp', 'GumoHideoutRightHangingExp', 'LeftGumoHideoutLowerPlant'},
|
||||
'LowerSorrow': {'SorrowLowerLeftKeystone', 'SorrowHiddenKeystone', 'SorrowEntranceAbilityCell', 'SorrowHealthCell',
|
||||
'SorrowSpikeKeystone'},
|
||||
'LowerSpiritCaverns': {'SpiritCavernsKeystone1', 'SpiritCavernsAbilityCell', 'SpiritCavernsKeystone2'},
|
||||
'LowerValley': {'LowerValleyExp', 'LowerValleyMapstone', 'KuroPerchExp'},
|
||||
'LowerValleyPlantApproach': {'ValleyMainPlant'}, 'MidSpiritCaverns': set(), 'MiddleSorrow': set(),
|
||||
'MistyAbove200xp': {'MistyGrenade'}, 'MistyBeforeDocks': set(), 'MistyBeforeMiniBoss': set(),
|
||||
'MistyEntrance': {'MistyEntranceStompExp', 'MistyEntranceTreeExp'}, 'MistyKeystone3Ledge': {'MistyKeystone3'},
|
||||
'MistyKeystone4Ledge': {'MistyKeystone4'}, 'MistyMortarSpikeCave': {'MistyPostClimbAboveSpikePit'},
|
||||
'MistyOrbRoom': {'GumonSeal'}, 'MistyPostClimb': set(),
|
||||
'MistyPostFeatherTutorial': {'MistyFrogNookExp', 'MistyKeystone1'}, 'MistyPostKeystone1': set(),
|
||||
'MistyPostLasers': {'MistyPostClimbSpikeCave'}, 'MistyPostMortarCorridor': set(),
|
||||
'MistyPreClimb': {'ClimbSkillTree'}, 'MistyPreKeystone2': {'MistyKeystone2', 'MistyAbilityCell'},
|
||||
'MistyPreLasers': set(), 'MistyPreMortarCorridor': {'MistyMortarCorridorUpperExp', 'MistyMortarCorridorHiddenExp'},
|
||||
'MistyPrePlantLedge': {'MistyPlant'}, 'MistySpikeCave': set(),
|
||||
'MoonGrotto': {'GrottoEnergyDoorHealthCell', 'GrottoEnergyDoorSwim'},
|
||||
'MoonGrottoAboveTeleporter': {'LeftGrottoTeleporterExp', 'AboveGrottoTeleporterExp'},
|
||||
'MoonGrottoBelowTeleporter': {'BelowGrottoTeleporterPlant', 'BelowGrottoTeleporterHealthCell'},
|
||||
'MoonGrottoStompPlantAccess': {'MoonGrottoStompPlant'},
|
||||
'MoonGrottoSwampAccessArea': {'GrottoSwampDrainAccessExp', 'GrottoSwampDrainAccessPlant'},
|
||||
'OuterSwampAbilityCellNook': {'OuterSwampAbilityCell'},
|
||||
'OuterSwampLowerArea': {'OuterSwampHealthCell', 'OuterSwampStompExp'},
|
||||
'OuterSwampMortarAbilityCellLedge': {'OuterSwampMortarAbilityCell'},
|
||||
'OuterSwampMortarPlantAccess': {'OuterSwampMortarPlant'}, 'OuterSwampUpperArea': {'OuterSwampGrenadeExp'},
|
||||
'OutsideForlorn': {'OutsideForlornTreeExp', 'OutsideForlornWaterExp'},
|
||||
'OutsideForlornCliff': {'OutsideForlornCliffExp'}, 'R1': {'HoruR1HangingExp'}, 'R1InnerDoor': set(),
|
||||
'R1OuterDoor': set(), 'R2': {'HoruR2'}, 'R2InnerDoor': set(), 'R2OuterDoor': set(), 'R3': set(),
|
||||
'R3InnerDoor': set(), 'R3OuterDoor': set(), 'R4': {'HoruR4DrainedExp'}, 'R4InnerDoor': set(),
|
||||
'R4OuterDoor': {'HoruLavaDrainedRightExp'}, 'RazielNoArea': {'RazielNo'},
|
||||
'RightForlorn': {'RightForlornPlant', 'RightForlornHealthCell'},
|
||||
'RightSwamp': {'StompAreaGrenadeExp', 'StompSkillTree', 'StompAreaExp', 'StompAreaRoofExp'},
|
||||
'SideFallCell': {'GrottoHideoutFallAbilityCell'}, 'SorrowBashLedge': set(),
|
||||
'SorrowMainShaftKeystoneArea': {'SorrowMainShaftKeystone'}, 'SorrowMapstoneArea': {'SorrowMap', 'SorrowMapstone'},
|
||||
'SorrowTeleporter': set(), 'SpiderSacArea': {'AboveChargeFlameTreeExp'},
|
||||
'SpiderSacEnergyNook': {'SpiderSacEnergyCell'},
|
||||
'SpiderSacTetherArea': {'SpiderSacGrenadeDoor', 'SpiderSacEnergyDoor', 'SpiderSacHealthCell'},
|
||||
'SpiderWaterArea': {'GroveSpiderWaterSwim', 'GroveAboveSpiderWaterEnergyCell', 'GroveAboveSpiderWaterExp',
|
||||
'GroveAboveSpiderWaterHealthCell'}, 'SpiritCavernsDoor': set(),
|
||||
'SpiritCavernsDoorOpened': set(), 'SpiritTreeDoor': set(), 'SpiritTreeDoorOpened': set(),
|
||||
'SpiritTreeRefined': {'AboveChargeFlameTreeExp'},
|
||||
'SunkenGladesRunaway': {'FronkeyWalkRoof', 'GladesGrenadePool', 'GladesMainPoolDeep', 'FirstPickup',
|
||||
'FronkeyFight', 'GladesMainPool', 'GladesKeystone1', 'GladesGrenadeTree',
|
||||
'GladesKeystone2'}, 'SunstoneArea': {'Sunstone', 'SunstonePlant'},
|
||||
'Swamp': {'InnerSwampDrainExp', 'SwampMap'}, 'SwampDrainlessArea': {'SwampEntranceAbilityCell'},
|
||||
'SwampEntryArea': {'SwampEntrancePlant', 'SwampEntranceSwim'}, 'SwampKeyDoorOpened': set(),
|
||||
'SwampKeyDoorPlatform': {'InnerSwampStompExp'}, 'SwampTeleporter': set(),
|
||||
'SwampWater': {'InnerSwampSwimRightKeystone', 'InnerSwampSwimMapstone', 'InnerSwampHiddenSwimExp',
|
||||
'InnerSwampSwimLeftKeystone'},
|
||||
'TopGinsoTree': {'TopGinsoLeftLowerExp', 'TopGinsoLeftUpperExp', 'TopGinsoRightPlant'},
|
||||
'UpperGinsoDoorClosed': set(), 'UpperGinsoDoorOpened': set(),
|
||||
'UpperGinsoRedirectArea': {'BashAreaExp', 'UpperGinsoRedirectUpperExp', 'UpperGinsoRedirectLowerExp'},
|
||||
'UpperGinsoTree': {'UpperGinsoUpperLeftKeystone', 'UpperGinsoLowerKeystone', 'UpperGinsoRightKeystone',
|
||||
'UpperGinsoUpperRightKeystone', 'UpperGinsoEnergyCell'}, 'UpperGrotto': {'GrottoLasersRoofExp'},
|
||||
'UpperLeftGlades': {'LeftGladesKeystone', 'LeftGladesExp', 'LeftGladesMapstone'},
|
||||
'UpperSorrow': {'UpperSorrowSpikeExp', 'UpperSorrowRightKeystone', 'UpperSorrowLeftKeystone',
|
||||
'UpperSorrowFarRightKeystone', 'UpperSorrowFarLeftKeystone'},
|
||||
'UpperSpiritCaverns': {'SpiritCavernsTopRightKeystone', 'SpiritCavernsTopLeftKeystone'},
|
||||
'ValleyEntry': {'ValleyEntryAbilityCell', 'ValleyThreeBirdAbilityCell'},
|
||||
'ValleyEntryTree': {'ValleyEntryTreeExp', 'ValleyEntryGrenadeLongSwim'},
|
||||
'ValleyEntryTreePlantAccess': {'ValleyEntryTreePlant'},
|
||||
'ValleyForlornApproach': {'ValleyMap', 'ValleyForlornApproachGrenade', 'ValleyForlornApproachMapstone'},
|
||||
'ValleyMain': {'GlideSkillFeather', 'KuroPerchExp'}, 'ValleyPostStompDoor': {'ValleyRightSwimExp'},
|
||||
'ValleyRight': set(), 'ValleyStompFloor': set(), 'ValleyStompless': {'KuroPerchExp'},
|
||||
'ValleyStomplessApproach': {'ValleyRightFastStomplessCell', 'ValleyRightBirdStompCell', 'ValleyRightExp'},
|
||||
'ValleyTeleporter': set(), 'ValleyThreeBirdLever': {'ValleyThreeBirdAbilityCell', 'ValleyMainFACS'},
|
||||
'WaterVeinArea': {'WaterVein', 'GumoHideoutRockfallExp'}, 'WilhelmLedge': {'WilhelmExp', 'KuroPerchExp'}}
|
||||
|
||||
connectors = \
|
||||
{'AboveChargeJumpArea': {'SorrowTeleporter', 'ChargeJumpArea'},
|
||||
'BashTree': {'BashTreeDoorClosed', 'UpperGinsoRedirectArea'}, 'BashTreeDoorClosed': {'BashTreeDoorOpened'},
|
||||
'BashTreeDoorOpened': {'GinsoMiniBossDoor', 'BashTree'}, 'BelowSunstoneArea': {'SunstoneArea', 'UpperSorrow'},
|
||||
'BlackrootDarknessRoom': {'DashArea'}, 'BlackrootGrottoConnection': {'SideFallCell'},
|
||||
'ChargeFlameAreaStump': {'LowerChargeFlameArea', 'ChargeFlameSkillTreeChamber', 'ChargeFlameAreaPlantAccess'},
|
||||
'ChargeFlameSkillTreeChamber': {'SpiritTreeRefined', 'ChargeFlameAreaStump'},
|
||||
'ChargeJumpArea': {'AboveChargeJumpArea', 'ChargeJumpDoor'}, 'ChargeJumpDoor': {'ChargeJumpDoorOpen'},
|
||||
'ChargeJumpDoorOpen': {'ChargeJumpDoorOpenLeft', 'ChargeJumpArea'}, 'ChargeJumpDoorOpenLeft': {'UpperSorrow'},
|
||||
'DashArea': {'RazielNoArea', 'GrenadeAreaAccess', 'DashPlantAccess'},
|
||||
'DeathGauntlet': {'DeathGauntletRoofPlantAccess', 'MoonGrotto', 'DeathGauntletMoat', 'MoonGrottoAboveTeleporter',
|
||||
'DeathGauntletRoof', 'DeathGauntletDoor'}, 'DeathGauntletDoor': {'DeathGauntletDoorOpened'},
|
||||
'DeathGauntletDoorOpened': {'SunkenGladesRunaway', 'DeathGauntlet', 'DeathGauntletMoat'},
|
||||
'DeathGauntletRoof': {'DeathGauntlet', 'DeathGauntletRoofPlantAccess'},
|
||||
'DoubleJumpKeyDoor': {'DoubleJumpKeyDoorOpened'}, 'ForlornGravityRoom': {'ForlornMapArea', 'ForlornInnerDoor'},
|
||||
'ForlornInnerDoor': {'ForlornGravityRoom', 'ForlornOrbPossession', 'ForlornOuterDoor'},
|
||||
'ForlornKeyDoor': {'ForlornLaserRoom'}, 'ForlornLaserRoom': {'ForlornStompDoor'},
|
||||
'ForlornMapArea': {'ForlornGravityRoom', 'ForlornKeyDoor', 'ForlornPlantAccess', 'ForlornTeleporter'},
|
||||
'ForlornOrbPossession': {'ForlornMapArea', 'ForlornKeyDoor', 'ForlornPlantAccess', 'ForlornInnerDoor'},
|
||||
'ForlornOuterDoor': {'OutsideForlorn', 'ForlornInnerDoor'}, 'ForlornStompDoor': {'RightForlorn'},
|
||||
'ForlornTeleporter': {'ForlornMapArea', 'ForlornGravityRoom', 'ForlornOrbPossession'},
|
||||
'GinsoEscape': {'GinsoEscapeComplete'}, 'GinsoEscapeComplete': {'Swamp'}, 'GinsoInnerDoor': {'LowerGinsoTree'},
|
||||
'GinsoMiniBossDoor': {'BashTreeDoorClosed'}, 'GinsoOuterDoor': {'GinsoInnerDoor'},
|
||||
'GinsoTeleporter': {'UpperGinsoDoorClosed', 'TopGinsoTree'}, 'GladesLaserArea': {'MidSpiritCaverns', 'GladesMain'},
|
||||
'GladesMain': {'LeftGlades', 'SpiritCavernsDoor', 'LowerChargeFlameArea', 'GladesMainAttic', 'GladesLaserArea'},
|
||||
'GladesMainAttic': {'LowerChargeFlameArea', 'GladesMain'}, 'GrenadeAreaAccess': {'LowerBlackroot', 'GrenadeArea'},
|
||||
'GumoHideout': {'SideFallCell', 'LeftGumoHideout', 'LowerLeftGumoHideout', 'DoubleJumpKeyDoor'},
|
||||
'GumoHideoutRedirectArea': {'GumoHideoutRedirectEnergyVault'},
|
||||
'HollowGrove': {'MoonGrottoStompPlantAccess', 'Iceless', 'SwampTeleporter', 'SpiderWaterArea', 'HoruFields',
|
||||
'OuterSwampUpperArea'}, 'HoruBasement': {'HoruEscapeOuterDoor'},
|
||||
'HoruEscapeOuterDoor': {'HoruEscapeInnerDoor'}, 'HoruFields': {'HoruOuterDoor', 'HoruFieldsPushBlock'},
|
||||
'HoruFieldsPushBlock': {'HollowGrove'},
|
||||
'HoruInnerDoor': {'HoruBasement', 'R2OuterDoor', 'HoruMapLedge', 'L1OuterDoor', 'L2OuterDoor', 'HoruTeleporter',
|
||||
'L3OuterDoor', 'R1OuterDoor', 'R4OuterDoor', 'HoruOuterDoor', 'L4OuterDoor', 'R3OuterDoor'},
|
||||
'HoruL4LavaChasePeg': {'HoruL4CutscenePeg'}, 'HoruOuterDoor': {'HoruFieldsPushBlock', 'HoruInnerDoor'},
|
||||
'HoruR1CutsceneTrigger': {'LowerGinsoTree'}, 'HoruR1MapstoneSecret': {'HoruR1CutsceneTrigger'},
|
||||
'HoruR3CutsceneTrigger': {'HoruR3PlantCove'}, 'HoruR3ElevatorLever': {'HoruR3PlantCove', 'HoruR3CutsceneTrigger'},
|
||||
'HoruR4PuzzleEntrance': {'HoruR4CutsceneTrigger'},
|
||||
'HoruR4StompHideout': {'HoruR4CutsceneTrigger', 'HoruR4PuzzleEntrance'}, 'HoruTeleporter': {'HoruInnerDoor'},
|
||||
'Iceless': {'HollowGrove', 'UpperGrotto'}, 'InnerSwampAboveDrainArea': {'InnerSwampDrainBroken'},
|
||||
'InnerSwampDrainBroken': {'Swamp'}, 'InnerSwampSkyArea': {'SwampKeyDoorPlatform', 'Swamp'}, 'L1InnerDoor': {'L1'},
|
||||
'L1OuterDoor': {'L1InnerDoor', 'HoruInnerDoor'}, 'L2InnerDoor': {'L2'},
|
||||
'L2OuterDoor': {'L2InnerDoor', 'HoruInnerDoor'}, 'L3InnerDoor': {'L3'},
|
||||
'L3OuterDoor': {'L3InnerDoor', 'HoruInnerDoor'}, 'L4': {'HoruL4CutscenePeg', 'HoruL4LavaChasePeg'},
|
||||
'L4InnerDoor': {'L4'}, 'L4OuterDoor': {'L4InnerDoor', 'HoruInnerDoor'},
|
||||
'LeftGlades': {'UpperLeftGlades', 'GladesMain'}, 'LeftGumoHideout': {'WaterVeinArea', 'LowerLeftGumoHideout'},
|
||||
'LeftSorrow': {'LeftSorrowKeystones'}, 'LeftSorrowKeystones': {'LeftSorrowMiddleDoor', 'MiddleSorrow'},
|
||||
'LeftSorrowLowerDoor': {'LeftSorrow'}, 'LeftSorrowMiddleDoor': {'MiddleSorrow'}, 'LostGrove': {'LostGroveExit'},
|
||||
'LowerBlackroot': {'LostGrove'}, 'LowerChargeFlameArea': {'ChargeFlameAreaStump', 'GladesMain'},
|
||||
'LowerGinsoTree': {'R4InnerDoor', 'GinsoMiniBossDoor'},
|
||||
'LowerLeftGumoHideout': {'LowerBlackroot', 'GumoHideoutRedirectArea'},
|
||||
'LowerSorrow': {'SorrowMainShaftKeystoneArea', 'SorrowMapstoneArea', 'LeftSorrowLowerDoor', 'LeftSorrow',
|
||||
'SunstoneArea', 'WilhelmLedge', 'MiddleSorrow'},
|
||||
'LowerSpiritCaverns': {'SpiritCavernsDoor', 'MidSpiritCaverns', 'GladesLaserArea'},
|
||||
'LowerValley': {'ValleyThreeBirdLever', 'LowerValleyPlantApproach', 'ValleyTeleporter', 'MistyEntrance'},
|
||||
'MidSpiritCaverns': {'UpperSpiritCaverns', 'LowerSpiritCaverns', 'GladesLaserArea'},
|
||||
'MiddleSorrow': {'SorrowMainShaftKeystoneArea', 'LeftSorrowKeystones', 'LeftSorrow', 'LowerSorrow', 'UpperSorrow',
|
||||
'SunstoneArea'}, 'MistyAbove200xp': {'MistyBeforeMiniBoss'},
|
||||
'MistyBeforeDocks': {'MistyAbove200xp'}, 'MistyBeforeMiniBoss': {'MistyOrbRoom'},
|
||||
'MistyEntrance': {'MistyPostFeatherTutorial'}, 'MistyKeystone3Ledge': {'MistyPreLasers'},
|
||||
'MistyKeystone4Ledge': {'MistyBeforeDocks'}, 'MistyMortarSpikeCave': {'MistyKeystone4Ledge'},
|
||||
'MistyOrbRoom': {'MistyPreKeystone2'}, 'MistyPostClimb': {'MistySpikeCave'},
|
||||
'MistyPostFeatherTutorial': {'MistyPostKeystone1'}, 'MistyPostKeystone1': {'MistyPreMortarCorridor'},
|
||||
'MistyPostLasers': {'MistyMortarSpikeCave'}, 'MistyPostMortarCorridor': {'MistyPrePlantLedge'},
|
||||
'MistyPreClimb': {'MistyPostClimb', 'ForlornTeleporter', 'RightForlorn'}, 'MistyPreLasers': {'MistyPostLasers'},
|
||||
'MistyPreMortarCorridor': {'MistyPostMortarCorridor', 'RightForlorn'}, 'MistyPrePlantLedge': {'MistyPreClimb'},
|
||||
'MistySpikeCave': {'MistyKeystone3Ledge'},
|
||||
'MoonGrotto': {'MoonGrottoBelowTeleporter', 'MoonGrottoAboveTeleporter', 'WaterVeinArea', 'DeathGauntlet',
|
||||
'GumoHideout'},
|
||||
'MoonGrottoAboveTeleporter': {'MoonGrottoSwampAccessArea', 'MoonGrottoBelowTeleporter',
|
||||
'MoonGrottoStompPlantAccess', 'MoonGrotto', 'DeathGauntletRoof', 'UpperGrotto'},
|
||||
'MoonGrottoSwampAccessArea': {'InnerSwampAboveDrainArea'}, 'OuterSwampAbilityCellNook': {'InnerSwampSkyArea'},
|
||||
'OuterSwampLowerArea': {'OuterSwampAbilityCellNook', 'OuterSwampMortarPlantAccess', 'SwampEntryArea',
|
||||
'OuterSwampMortarAbilityCellLedge', 'UpperGrotto', 'OuterSwampUpperArea'},
|
||||
'OuterSwampMortarAbilityCellLedge': {'OuterSwampMortarPlantAccess', 'UpperGrotto'},
|
||||
'OuterSwampUpperArea': {'OuterSwampLowerArea', 'OuterSwampAbilityCellNook', 'GinsoOuterDoor'},
|
||||
'OutsideForlorn': {'OutsideForlornCliff', 'RightForlorn', 'ForlornOuterDoor'},
|
||||
'OutsideForlornCliff': {'OutsideForlorn', 'ValleyForlornApproach'}, 'R1': {'HoruR1MapstoneSecret'},
|
||||
'R1InnerDoor': {'R1'}, 'R1OuterDoor': {'R1InnerDoor', 'L1OuterDoor'}, 'R2InnerDoor': {'R2'},
|
||||
'R2OuterDoor': {'R2InnerDoor', 'HoruInnerDoor'}, 'R3': {'HoruR3ElevatorLever'}, 'R3InnerDoor': {'R3'},
|
||||
'R3OuterDoor': {'R3InnerDoor', 'HoruInnerDoor'}, 'R4': {'HoruR4StompHideout'}, 'R4InnerDoor': {'R4'},
|
||||
'R4OuterDoor': {'R4InnerDoor', 'HoruInnerDoor'}, 'RazielNoArea': {'GumoHideout', 'BlackrootGrottoConnection'},
|
||||
'SideFallCell': {'LeftGumoHideout', 'GumoHideout'}, 'SorrowBashLedge': {'LowerSorrow'},
|
||||
'SorrowMainShaftKeystoneArea': {'LowerSorrow'}, 'SorrowMapstoneArea': {'HoruInnerDoor'},
|
||||
'SorrowTeleporter': {'AboveChargeJumpArea', 'BelowSunstoneArea'},
|
||||
'SpiderSacArea': {'SpiritTreeRefined', 'SpiderWaterArea', 'SpiderSacTetherArea', 'SpiderSacEnergyNook'},
|
||||
'SpiderSacEnergyNook': {'ChargeFlameAreaPlantAccess'},
|
||||
'SpiderSacTetherArea': {'SpiderWaterArea', 'SpiderSacEnergyNook'},
|
||||
'SpiderWaterArea': {'HollowGrove', 'DeathGauntletRoof', 'SpiderSacEnergyNook', 'SpiderSacArea'},
|
||||
'SpiritCavernsDoor': {'SpiritCavernsDoorOpened'}, 'SpiritCavernsDoorOpened': {'LowerSpiritCaverns', 'GladesMain'},
|
||||
'SpiritTreeDoor': {'SpiritTreeDoorOpened'}, 'SpiritTreeDoorOpened': {'SpiritTreeRefined', 'UpperSpiritCaverns'},
|
||||
'SpiritTreeRefined': {'ChargeFlameAreaStump', 'SpiritTreeDoor', 'ChargeFlameSkillTreeChamber', 'ValleyEntry',
|
||||
'SpiderSacArea'},
|
||||
'SunkenGladesRunaway': {'MoonGrotto', 'LowerChargeFlameArea', 'ValleyTeleporter', 'SorrowTeleporter',
|
||||
'HoruTeleporter', 'GladesMain', 'GinsoTeleporter', 'SwampTeleporter', 'SpiritTreeRefined',
|
||||
'BlackrootDarknessRoom', 'DeathGauntletDoor', 'ForlornTeleporter'},
|
||||
'SunstoneArea': {'SorrowTeleporter', 'UpperSorrow'},
|
||||
'Swamp': {'SwampKeyDoorPlatform', 'SwampDrainlessArea', 'SwampWater'},
|
||||
'SwampEntryArea': {'SwampDrainlessArea', 'Swamp'}, 'SwampKeyDoorOpened': {'RightSwamp'},
|
||||
'SwampKeyDoorPlatform': {'SwampKeyDoorOpened', 'InnerSwampSkyArea'},
|
||||
'SwampTeleporter': {'HollowGrove', 'OuterSwampMortarAbilityCellLedge'}, 'TopGinsoTree': {'GinsoEscape'},
|
||||
'UpperGinsoDoorClosed': {'UpperGinsoDoorOpened'}, 'UpperGinsoDoorOpened': {'GinsoTeleporter', 'UpperGinsoTree'},
|
||||
'UpperGinsoRedirectArea': {'UpperGinsoTree', 'BashTree'},
|
||||
'UpperGinsoTree': {'UpperGinsoDoorClosed', 'UpperGinsoRedirectArea'},
|
||||
'UpperGrotto': {'MoonGrottoStompPlantAccess', 'Iceless', 'MoonGrottoAboveTeleporter',
|
||||
'OuterSwampMortarAbilityCellLedge', 'OuterSwampLowerArea'}, 'UpperLeftGlades': {'LeftGlades'},
|
||||
'UpperSorrow': {'SunstoneArea', 'MiddleSorrow', 'SorrowTeleporter', 'ChargeJumpDoor'},
|
||||
'UpperSpiritCaverns': {'SpiritTreeDoor', 'MidSpiritCaverns'},
|
||||
'ValleyEntry': {'ValleyThreeBirdLever', 'ValleyStompFloor', 'ValleyPostStompDoor', 'ValleyEntryTreePlantAccess',
|
||||
'ValleyEntryTree', 'SpiritTreeRefined'},
|
||||
'ValleyEntryTree': {'ValleyPostStompDoor', 'ValleyEntryTreePlantAccess'},
|
||||
'ValleyForlornApproach': {'ValleyStompFloor', 'OutsideForlornCliff'},
|
||||
'ValleyMain': {'LowerValleyPlantApproach', 'LowerValley', 'MistyEntrance', 'WilhelmLedge', 'ValleyStompless'},
|
||||
'ValleyPostStompDoor': {'ValleyEntry', 'ValleyRight', 'ValleyEntryTree'},
|
||||
'ValleyRight': {'ValleyPostStompDoor', 'ValleyStomplessApproach'},
|
||||
'ValleyStompFloor': {'ValleyThreeBirdLever', 'ValleyEntry', 'ValleyForlornApproach'},
|
||||
'ValleyStompless': {'LowerValleyPlantApproach', 'ValleyMain', 'LowerValley', 'WilhelmLedge', 'MistyEntrance',
|
||||
'ValleyStomplessApproach'}, 'ValleyStomplessApproach': {'ValleyRight', 'ValleyStompless'},
|
||||
'ValleyTeleporter': {'LowerValleyPlantApproach', 'ValleyRight', 'ValleyPostStompDoor', 'LowerValley',
|
||||
'MistyEntrance', 'ValleyStompless'},
|
||||
'ValleyThreeBirdLever': {'ValleyStompFloor', 'ValleyEntry', 'LowerValley'},
|
||||
'WaterVeinArea': {'MoonGrotto', 'LeftGumoHideout', 'LowerLeftGumoHideout'},
|
||||
'WilhelmLedge': {'ValleyMain', 'SorrowBashLedge', 'ValleyStompless'}}
|
|
@ -0,0 +1,52 @@
|
|||
from .RulesData import location_rules
|
||||
from ..generic.Rules import set_rule
|
||||
from BaseClasses import Location
|
||||
|
||||
|
||||
# TODO: implement Mapstone counting, Open, OpenWorld, connection rules
|
||||
|
||||
def set_rules(world):
|
||||
temp_base_rule(world.world, world.player)
|
||||
for logicset in world.logic_sets:
|
||||
apply_or_ruleset(world.world, world.player, logicset)
|
||||
|
||||
|
||||
tautology = lambda state: True
|
||||
|
||||
|
||||
def add_or_rule_check_first(world, location: str, player: int, conditionsets):
|
||||
location = world.get_location(location, player)
|
||||
for set in conditionsets:
|
||||
if "Free" in set:
|
||||
location.access_rule = tautology
|
||||
return
|
||||
rule = lambda state, conditionsets=conditionsets: any(
|
||||
state._oribf_has_all(conditionset, player) for conditionset in conditionsets)
|
||||
if location.access_rule is Location.access_rule:
|
||||
location.access_rule = rule
|
||||
else:
|
||||
old_rule = location.access_rule
|
||||
location.access_rule = lambda state: rule(state) or old_rule(state)
|
||||
|
||||
|
||||
def temp_base_rule(world, player):
|
||||
world.completion_condition[player] = lambda state: state._oribf_has_all(
|
||||
{"Bash", "ChargeFlame", "ChargeJump", "Climb", "Dash", "DoubleJump", "Glide", "Grenade", "Stomp", "WallJump"},
|
||||
player)
|
||||
|
||||
|
||||
def base_rule(world, player):
|
||||
if world.logic[player] != 'nologic':
|
||||
# Victory gets placed on Escaped Horu Event
|
||||
world.completion_condition[player] = lambda state: state.has('Victory', player)
|
||||
# Events
|
||||
# Also add: can complete goal
|
||||
set_rule(world.get_location("Escaped Horu", player),
|
||||
lambda state: state.can_reach("HoruEscapeInnerDoor", player)
|
||||
and state.has_any({"Dash", "Stomp", "ChargeJump", "ChargeFlame"}, player))
|
||||
|
||||
|
||||
def apply_or_ruleset(world, player, rulesetname):
|
||||
rules = location_rules[rulesetname]
|
||||
for location, conditionsets in rules.items():
|
||||
add_or_rule_check_first(world, location, player, conditionsets)
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,5 @@
|
|||
from typing import NamedTuple
|
||||
|
||||
class Location(NamedTuple):
|
||||
code: int
|
||||
vanilla_item: str
|
|
@ -0,0 +1,75 @@
|
|||
from typing import Set
|
||||
|
||||
from ..AutoWorld import World, LogicMixin
|
||||
from .Items import item_table, default_pool
|
||||
from .Locations import lookup_name_to_id
|
||||
from .Rules import set_rules, location_rules
|
||||
from .Regions import locations_by_region, connectors
|
||||
from .Options import options
|
||||
from BaseClasses import Region, Item, Location, RegionType, Entrance
|
||||
|
||||
|
||||
class OriBlindForest(World):
|
||||
game: str = "Ori and the Blind Forest"
|
||||
|
||||
topology_present = True
|
||||
|
||||
item_names = frozenset(item_table)
|
||||
location_names = frozenset(lookup_name_to_id)
|
||||
|
||||
item_name_to_id = item_table
|
||||
location_name_to_id = lookup_name_to_id
|
||||
|
||||
options = options
|
||||
|
||||
def generate_early(self):
|
||||
logic_sets = {"casual-core"}
|
||||
for logic_set in location_rules:
|
||||
if logic_set != "casual-core" and getattr(self.world, logic_set.replace("-", "_")):
|
||||
logic_sets.add(logic_set)
|
||||
self.logic_sets = logic_sets
|
||||
|
||||
set_rules = set_rules
|
||||
|
||||
def create_region(self, name: str):
|
||||
return Region(name, RegionType.Generic, name, self.player, self.world)
|
||||
|
||||
def create_regions(self):
|
||||
world = self.world
|
||||
menu = self.create_region("Menu")
|
||||
world.regions.append(menu)
|
||||
start = Entrance(self.player, "Start Game", menu)
|
||||
menu.exits.append(start)
|
||||
|
||||
# workaround for now, remove duplicate locations
|
||||
already_placed_locations = set()
|
||||
|
||||
for region_name, locations in locations_by_region.items():
|
||||
locations -= already_placed_locations
|
||||
already_placed_locations |= locations
|
||||
region = self.create_region(region_name)
|
||||
if region_name == "SunkenGladesRunaway": # starting point
|
||||
start.connect(region)
|
||||
region.locations = {Location(self.player, location, lookup_name_to_id[location], region)
|
||||
for location in locations}
|
||||
world.regions.append(region)
|
||||
|
||||
for region_name, exits in connectors.items():
|
||||
parent = world.get_region(region_name, self.player)
|
||||
for exit in exits:
|
||||
connection = Entrance(self.player, exit, parent)
|
||||
connection.connect(world.get_region(exit, self.player))
|
||||
parent.exits.append(connection)
|
||||
|
||||
def generate_basic(self):
|
||||
for item_name, count in default_pool.items():
|
||||
self.world.itempool.extend([self.create_item(item_name)] * count)
|
||||
|
||||
def create_item(self, name: str) -> Item:
|
||||
return Item(name, not name.startswith("EX"), item_table[name], self.player)
|
||||
|
||||
|
||||
class OriBlindForestLogic(LogicMixin):
|
||||
def _oribf_has_all(self, items: Set[str], player:int):
|
||||
return all(self.prog_items[item, player] if type(item) == str
|
||||
else self.prog_items[item[0], player] >= item[1] for item in items)
|
Loading…
Reference in New Issue