from worlds.generic.Rules import set_rule, add_rule from ..AutoWorld import LogicMixin class BlasphemousLogic(LogicMixin): def _blasphemous_blood_relic(self, player): return self.has("Blood Perpetuated in Sand", player) def _blasphemous_water_relic(self, player): return self.has("Nail Uprooted from Dirt", player) def _blasphemous_corpse_relic(self, player): return self.has("Shroud of Dreamt Sins", player) def _blasphemous_fall_relic(self, player): return self.has("Linen of Golden Thread", player) def _blasphemous_miasma_relic(self, player): return self.has("Silvered Lung of Dolphos", player) def _blasphemous_root_relic(self, player): return self.has("Three Gnarled Tongues", player) def _blasphemous_open_holes(self, player): return self.has_any({"Dive Skill", "Charged Skill"}, player) or \ self.has_group("prayer", player, 1) or \ (self.has_any({"Tirana of the Celestial Bastion", "Aubade of the Nameless Guardian"}, player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_bell(self, player): return self.has("Petrified Bell", player) def _blasphemous_bead(self, player): return self.has("Weight of True Guilt", player) def _blasphemous_cloth(self, player): return self.has("Linen Cloth", player) def _blasphemous_pre_egg(self, player): return self.has("Egg of Deformity", player) def _blasphemous_egg(self, player): return self.has("Hatched Egg of Deformity", player) def _blasphemous_hand(self, player): return self.has("Severed Hand", player) def _blasphemous_chalice(self, player): return self.has("Chalice of Inverted Verses", player) def _blasphemous_thimble(self, player): return self.has("Empty Golden Thimble", player) def _blasphemous_full_thimble(self, player): return self.has("Golden Thimble Filled with Burning Oil", player) def _blasphemous_flowers(self, player): return self.has("Dried Flowers bathed in Tears", player) def _blasphemous_redento(self, player): return self.has_all({"Little Toe made of Limestone", "Big Toe made of Limestone", \ "Fourth Toe made of Limestone"}, player) and \ self.has("Knot of Rosary Rope", player) def _blasphemous_cord(self, player): return self.has("Cord of the True Burying", player) def _blasphemous_marks(self, player): return self.has_all({"Mark of the First Refuge", "Mark of the Second Refuge", \ "Mark of the Third Refuge"}, player) def _blasphemous_red_wax(self, player): return self.has("Bead of Red Wax", player) def _blasphemous_blue_wax(self, player): return self.has("Bead of Blue Wax", player) def _blasphemous_both_wax(self, player): return self.has("Bead of Red Wax", player, 3) and \ self.has("Bead of Blue Wax", player, 3) def _blasphemous_elder_key(self, player): return self.has("Key to the Chamber of the Eldest Brother", player) def _blasphemous_bronze_key(self, player): return self.has("Key of the Secular", player) def _blasphemous_silver_key(self, player): return self.has("Key of the Scribe", player) def _blasphemous_gold_key(self, player): return self.has("Key of the Inquisitor", player) def _blasphemous_high_key(self, player): return self.has("Key of the High Peaks", player) def _blasphemous_wood_key(self, player): return self.has("Key Grown from Twisted Wood", player) def _blasphemous_scapular(self, player): return self.has("Incomplete Scapular", player) def _blasphemous_heart_c(self, player): return self.has("Apodictic Heart of Mea Culpa", player) def _blasphemous_eyes(self, player): return self.has("Severed Right Eye of the Traitor", player) and \ self.has("Broken Left Eye of the Traitor", player) def _blasphemous_debla(self, player): return self.has("Debla of the Lights", player) def _blasphemous_taranto(self, player): return self.has("Taranto to my Sister", player) def _blasphemous_tirana(self, player): return self.has("Tirana of the Celestial Bastion", player) and \ self.has("Fervour Upgrade", player, 2) def _blasphemous_aubade(self, player): return self.has("Aubade of the Nameless Guardian", player) and \ self.has("Fervour Upgrade", player, 2) def _blasphemous_cherub_6(self, player): return self.has_any({"Debla of the Lights", "Taranto to my Sister", "Verdiales of the Forsaken Hamlet", \ "Cloistered Ruby"}, player) or \ (self.has("Tirana of the Celestial Bastion", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_13(self, player): return self.has_any({"Ranged Skill", "Debla of the Lights", "Taranto to my Sister", \ "Cante Jondo of the Three Sisters", "Cloistered Ruby"}, player) or \ (self.has_any({"Aubade of the Nameless Guardian", "Tirana of the Celestial Bastion"}, player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_20(self, player): return self.has_any({"Debla of the Lights", "Lorqiana", "Zarabanda of the Safe Haven", "Taranto to my Sister", \ "Cante Jondo of the Three Sisters", "Cloistered Ruby"}, player) or \ (self.has_any({"Aubade of the Nameless Guardian", "Tirana of the Celestial Bastion"}, player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_21(self, player): return self.has_any({"Debla of the Lights", "Taranto to my Sister", "Cante Jondo of the Three Sisters", \ "Verdiales of the Forsaken Hamlet", "Cloistered Ruby"}, player) or \ (self.has("Tirana of the Celestial Bastion", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_22_23_31_32(self, player): return self.has_any({"Debla of the Lights", "Taranto to my Sister", "Cloistered Ruby"}, player) def _blasphemous_cherub_24_33(self, player): return self.has_any({"Debla of the Lights", "Taranto to my Sister", "Cante Jondo of the Three Sisters", \ "Cloistered Ruby"}, player) or \ (self.has("Tirana of the Celestial Bastion", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_25(self, player): return self.has_any({"Debla of the Lights", "Lorquiana", "Taranto to my Sister", \ "Cante Jondo of the Three Sisters", "Verdiales of the Forsaken Hamlet", "Cantina of the Blue Rose", \ "Cloistered Ruby"}, player) or \ (self.has("Aubade of the Nameless Guardian", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_27(self, player): return self.has_any({"Ranged Skill", "Debla of the Lights", "Lorquiana", "Taranto to my Sister", \ "Cante Jondo of the Three Sisters", "Cantina of the Blue Rose", "Cloistered Ruby"}, player) or \ (self.has("Aubade of the Nameless Guardian", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_cherub_38(self, player): return self.has_any({"Ranged Skill", "Lorquiana", "Cante Jondo of the Three Sisters", \ "Cantina of the Blue Rose", "Cloistered Ruby"}, player) or \ (self.has("The Young Mason's Wheel", player) and \ self.has("Brilliant Heart of Dawn", player)) or \ (self.has("Aubade of the Nameless Guardian", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_wheel(self, player): return self.has("The Young Mason's Wheel", player) def _blasphemous_dawn_heart(self, player): return self.has("Brilliant Heart of Dawn", player) def _blasphemous_tirso_1(self, player): return self.has_group("tirso", player, 1) def _blasphemous_tirso_2(self, player): return self.has_group("tirso", player, 2) def _blasphemous_tirso_3(self, player): return self.has_group("tirso", player, 3) def _blasphemous_tirso_4(self, player): return self.has_group("tirso", player, 4) def _blasphemous_tirso_5(self, player): return self.has_group("tirso", player, 5) def _blasphemous_tirso_6(self, player): return self.has_group("tirso", player, 6) def _blasphemous_tentudia_1(self, player): return self.has_group("tentudia", player, 1) def _blasphemous_tentudia_2(self, player): return self.has_group("tentudia", player, 2) def _blasphemous_tentudia_3(self, player): return self.has_group("tentudia", player, 3) def _blasphemous_altasgracias_3(self, player): return self.has_group("egg", player, 3) def _blasphemous_cherubs_20(self, player): return self.has("Child of Moonlight", player, 20) def _blasphemous_cherubs_all(self, player): return self.has("Child of Moonlight", player, 38) def _blasphemous_bones_4(self, player): return self.has_group("bones", player, 4) def _blasphemous_bones_8(self, player): return self.has_group("bones", player, 8) def _blasphemous_bones_12(self, player): return self.has_group("bones", player, 12) def _blasphemous_bones_16(self, player): return self.has_group("bones", player, 16) def _blasphemous_bones_20(self, player): return self.has_group("bones", player, 20) def _blasphemous_bones_24(self, player): return self.has_group("bones", player, 24) def _blasphemous_bones_28(self, player): return self.has_group("bones", player, 28) def _blasphemous_bones_30(self, player): return self.has_group("bones", player, 30) def _blasphemous_bones_32(self, player): return self.has_group("bones", player, 32) def _blasphemous_bones_36(self, player): return self.has_group("bones", player, 36) def _blasphemous_bones_40(self, player): return self.has_group("bones", player, 40) def _blasphemous_bones_44(self, player): return self.has_group("bones", player, 44) def _blasphemous_sword_1(self, player): return self.has("Mea Culpa Upgrade", player) def _blasphemous_sword_2(self, player): return self.has("Mea Culpa Upgrade", player, 2) def _blasphemous_sword_3(self, player): return self.has("Mea Culpa Upgrade", player, 3) def _blasphemous_sword_4(self, player): return self.has("Mea Culpa Upgrade", player, 4) def _blasphemous_sword_5(self, player): return self.has("Mea Culpa Upgrade", player, 5) def _blasphemous_sword_6(self, player): return self.has("Mea Culpa Upgrade", player, 6) def _blasphemous_sword_7(self, player): return self.has("Mea Culpa Upgrade", player, 7) def _blasphemous_ranged(self, player): return self.has("Ranged Skill", player) def _blasphemous_bridge_access(self, player): return self.has_group("wounds", player, 3) def _blasphemous_ex_bridge_access(self, player): return self.has_group("wounds", player, 3) or \ (self.has("Brilliant Heart of Dawn", player) and \ self.has("Ranged Skill", player) and \ self.has("Blood Perpetuated in Sand", player)) or \ (self.has("Blood Perpetuated in Sand", player) and \ self.has("Tirana of the Celestial Bastion", player) and \ self.has("Fervour Upgrade", player, 2)) def _blasphemous_1_mask(self, player): return self.has_group("masks", player, 1) def _blasphemous_2_masks(self, player): return self.has_group("masks", player, 2) def _blasphemous_3_masks(self, player): return self.has_group("masks", player, 3) def _blasphemous_laudes_gate(self, player): return self.has_all({"Petrified Bell", "Blood Perpetuated in Sand", "Three Gnarled Tongues", "Key of the Secular", "Key of the Scribe", "Verses Spun from Gold"}, player) # Ten Piedad, Tres Angustias, Our Lady of the Charred Visage def _blasphemous_wound_boss_easy(self, player): return self.has("Mea Culpa Upgrade", player, 2) and \ self.has_group("power", player, 3) def _blasphemous_wound_boss_normal(self, player): return self.has("Mea Culpa Upgrade", player, 1) def _blasphemous_wound_boss_hard(self, player): return True # Esdras def _blasphemous_esdras_boss_easy(self, player): return self.has("Mea Culpa Upgrade", player, 3) and \ self.has_group("power", player, 5) def _blasphemous_esdras_boss_normal(self, player): return self.has("Mea Culpa Upgrade", player, 2) and \ self.has_group("power", player, 2) def _blasphemous_esdras_boss_hard(self, player): return self.has("Mea Culpa Upgrade", player, 1) and \ self.has_group("power", player, 1) # Melquiades, Exposito, Quirce def _blasphemous_mask_boss_easy(self, player): return self.has("Mea Culpa Upgrade", player, 4) and \ self.has_group("power", player, 8) def _blasphemous_mask_boss_normal(self, player): return self.has("Mea Culpa Upgrade", player, 3) and \ self.has_group("power", player, 4) def _blasphemous_mask_boss_hard(self, player): return self.has("Mea Culpa Upgrade", player, 2) and \ self.has_group("power", player, 2) # Crisanta, Isidora, Sierpes, Amanecidas, Laudes def _blasphemous_endgame_boss_easy(self, player): return self.has("Mea Culpa Upgrade", player, 6) and \ self.has_group("power", player, 16) def _blasphemous_endgame_boss_normal(self, player): return self.has("Mea Culpa Upgrade", player, 5) and \ self.has_group("power", player, 8) def _blasphemous_endgame_boss_hard(self, player): return self.has("Mea Culpa Upgrade", player, 4) and \ self.has_group("power", player, 5) def rules(blasphemousworld): world = blasphemousworld.multiworld player = blasphemousworld.player # entrances for i in world.get_region("Deambulatory of His Holiness", player).entrances: set_rule(i, lambda state: state._blasphemous_3_masks(player)) for i in world.get_region("Ferrous Tree", player).entrances: set_rule(i, lambda state: state._blasphemous_bridge_access(player)) for i in world.get_region("Mother of Mothers", player).entrances: set_rule(i, lambda state: state._blasphemous_bridge_access(player)) for i in world.get_region("Mourning and Havoc", player).entrances: set_rule(i, lambda state: state._blasphemous_blood_relic(player) or \ state.can_reach(world.get_region("Mother of Mothers", player), player)) for i in world.get_region("Patio of the Silent Steps", player).entrances: set_rule(i, lambda state: state._blasphemous_bridge_access(player)) for i in world.get_region("The Resting Place of the Sister", player).entrances: set_rule(i, lambda state: state._blasphemous_blood_relic(player)) for i in world.get_region("The Sleeping Canvases", player).entrances: set_rule(i, lambda state: state._blasphemous_bridge_access(player)) for i in world.get_region("Wall of the Holy Prohibitions", player).entrances: set_rule(i, lambda state: state._blasphemous_1_mask(player) and \ state._blasphemous_bridge_access(player)) # Albero set_rule(world.get_location("Albero: Bless Linen Cloth", player), lambda state: state._blasphemous_cloth(player)) set_rule(world.get_location("Albero: Bless Hatched Egg", player), lambda state: state._blasphemous_egg(player)) set_rule(world.get_location("Albero: Bless Severed Hand", player), lambda state: state._blasphemous_hand(player)) set_rule(world.get_location("Albero: First gift for Cleofas", player), lambda state: state.can_reach(world.get_region("Mother of Mothers", player))) set_rule(world.get_location("Albero: Final gift for Cleofas", player), lambda state: state.can_reach(world.get_region("Mother of Mothers", player)) and \ state._blasphemous_marks(player) and \ state._blasphemous_cord(player)) set_rule(world.get_location("Albero: Tirso's 1st reward", player), lambda state: state._blasphemous_tirso_1(player)) set_rule(world.get_location("Albero: Tirso's 2nd reward", player), lambda state: state._blasphemous_tirso_2(player)) set_rule(world.get_location("Albero: Tirso's 3rd reward", player), lambda state: state._blasphemous_tirso_3(player)) set_rule(world.get_location("Albero: Tirso's 4th reward", player), lambda state: state._blasphemous_tirso_4(player)) set_rule(world.get_location("Albero: Tirso's 5th reward", player), lambda state: state._blasphemous_tirso_5(player)) set_rule(world.get_location("Albero: Tirso's 6th reward", player), lambda state: state._blasphemous_tirso_6(player)) set_rule(world.get_location("Albero: Tirso's final reward", player), lambda state: state._blasphemous_tirso_6(player) and \ state.can_reach(world.get_region("Wall of the Holy Prohibitions", player)) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("Albero: Lvdovico's 1st reward", player), lambda state: state._blasphemous_tentudia_1(player)) set_rule(world.get_location("Albero: Lvdovico's 2nd reward", player), lambda state: state._blasphemous_tentudia_2(player)) set_rule(world.get_location("Albero: Lvdovico's 3rd reward", player), lambda state: state._blasphemous_tentudia_3(player)) set_rule(world.get_location("Ossuary: Isidora, Voice of the Dead", player), lambda state: state._blasphemous_bones_30(player)) set_rule(world.get_location("Ossuary: 1st reward", player), lambda state: state._blasphemous_bones_4(player)) set_rule(world.get_location("Ossuary: 2nd reward", player), lambda state: state._blasphemous_bones_8(player)) set_rule(world.get_location("Ossuary: 3rd reward", player), lambda state: state._blasphemous_bones_12(player)) set_rule(world.get_location("Ossuary: 4th reward", player), lambda state: state._blasphemous_bones_16(player)) set_rule(world.get_location("Ossuary: 5th reward", player), lambda state: state._blasphemous_bones_20(player)) set_rule(world.get_location("Ossuary: 6th reward", player), lambda state: state._blasphemous_bones_24(player)) set_rule(world.get_location("Ossuary: 7th reward", player), lambda state: state._blasphemous_bones_28(player)) set_rule(world.get_location("Ossuary: 8th reward", player), lambda state: state._blasphemous_bones_32(player)) set_rule(world.get_location("Ossuary: 9th reward", player), lambda state: state._blasphemous_bones_36(player)) set_rule(world.get_location("Ossuary: 10th reward", player), lambda state: state._blasphemous_bones_40(player)) set_rule(world.get_location("Ossuary: 11th reward", player), lambda state: state._blasphemous_bones_44(player)) # All the Tears of the Sea set_rule(world.get_location("AtTotS: Miriam's gift", player), lambda state: state._blasphemous_2_masks(player) and \ state._blasphemous_fall_relic(player) and \ state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_miasma_relic(player)) # Archcathedral Rooftops set_rule(world.get_location("AR: Second soldier fight", player), lambda state: state._blasphemous_1_mask(player)) set_rule(world.get_location("AR: Third soldier fight", player), lambda state: state._blasphemous_2_masks(player)) set_rule(world.get_location("AR: Upper west shaft Child of Moonlight", player), lambda state: state._blasphemous_1_mask(player)) set_rule(world.get_location("AR: Upper west shaft chest", player), lambda state: state._blasphemous_2_masks(player) and \ state._blasphemous_fall_relic(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("AR: Lady of the Six Sorrows", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("AR: Upper east shaft ledge", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_1_mask(player)) set_rule(world.get_location("AR: Mea Culpa altar", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_2_masks(player)) set_rule(world.get_location("AR: Crisanta of the Wrapped Agony", player), lambda state: state._blasphemous_3_masks(player)) # Bridge of the Three Cavalries set_rule(world.get_location("BotTC: Esdras, of the Anointed Legion", player), lambda state: state._blasphemous_bridge_access(player)) set_rule(world.get_location("BotTC: Esdras' gift", player), lambda state: state._blasphemous_bridge_access(player)) set_rule(world.get_location("BotTC: Inside giant statue", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_laudes_gate(player) and \ state._blasphemous_1_mask(player)) # Brotherhood of the Silent Sorrow set_rule(world.get_location("BotSS: Starting room Child of Moonlight", player), lambda state: (state._blasphemous_blood_relic(player) and \ (state._blasphemous_root_relic(player)) or \ (state._blasphemous_fall_relic(player))) or \ (state._blasphemous_blood_relic(player) and \ state._blasphemous_cherub_6(player)) or \ (state._blasphemous_debla(player) or \ state._blasphemous_taranto(player))) set_rule(world.get_location("BotSS: Starting room ledge", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_fall_relic(player)) set_rule(world.get_location("BotSS: Chamber of the Eldest Brother", player), lambda state: state._blasphemous_elder_key(player)) set_rule(world.get_location("BotSS: Blue candle", player), lambda state: state._blasphemous_blue_wax(player)) set_rule(world.get_location("BotSS: Outside church", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("BotSS: Esdras' final gift", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_scapular(player) and \ state._blasphemous_bridge_access(player)) set_rule(world.get_location("BotSS: Crisanta's gift", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_scapular(player) and \ state._blasphemous_heart_c(player) and \ state._blasphemous_3_masks(player) and \ state._blasphemous_bridge_access(player)) # Convent of our Lady of the Charred Visage set_rule(world.get_location("CoOLotCV: Lower west statue", player), lambda state: state._blasphemous_miasma_relic(player)) set_rule(world.get_location("CoOLotCV: Lady of the Six Sorrows", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_high_key(player)) set_rule(world.get_location("CoOLotCV: Red candle", player), lambda state: state._blasphemous_red_wax(player)) set_rule(world.get_location("CoOLotCV: Fountain of burning oil", player), lambda state: state._blasphemous_thimble(player)) set_rule(world.get_location("CoOLotCV: Mask room", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_high_key(player)) # Desecrated Cistern set_rule(world.get_location("DC: Upper east tunnel chest", player), lambda state: state._blasphemous_water_relic(player) or \ state._blasphemous_fall_relic(player)) set_rule(world.get_location("DC: Upper east Child of Moonlight", player), lambda state: state._blasphemous_water_relic(player) or \ state._blasphemous_fall_relic(player) or \ state._blasphemous_cherub_13(player)) set_rule(world.get_location("DC: Hidden alcove near fountain", player), lambda state: state._blasphemous_water_relic(player)) set_rule(world.get_location("DC: Shroud puzzle", player), lambda state: state._blasphemous_corpse_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player)) set_rule(world.get_location("DC: Chalice room", player), lambda state: (state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ state._blasphemous_root_relic(player)) or \ (state._blasphemous_fall_relic(player) and \ state._blasphemous_root_relic(player))) set_rule(world.get_location("DC: Mea Culpa altar", player), lambda state: state._blasphemous_chalice(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("DC: Child of Moonlight, behind pillar", player), lambda state: state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player)) set_rule(world.get_location("DC: High ledge near elevator shaft", player), lambda state: state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player)) set_rule(world.get_location("DC: Elevator shaft Child of Moonlight", player), lambda state: state._blasphemous_fall_relic(player) or \ (state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ state._blasphemous_cherub_22_23_31_32(player))) set_rule(world.get_location("DC: Elevator shaft ledge", player), lambda state: state._blasphemous_fall_relic(player)) # Graveyard of the Peaks set_rule(world.get_location("GotP: Shop cave Child of Moonlight", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_fall_relic(player) or \ state._blasphemous_cherub_22_23_31_32(player)) # to do: or dive set_rule(world.get_location("GotP: Shop cave hidden hole", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_open_holes(player)) set_rule(world.get_location("GotP: Upper east shaft", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("GotP: East cliffside", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("GotP: West shaft Child of Moonlight", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_cherub_25(player)) set_rule(world.get_location("GotP: Center shaft Child of Moonlight", player), lambda state: state._blasphemous_fall_relic(player) or \ state._blasphemous_cherub_24_33(player)) # to do: requires dive set_rule(world.get_location("GotP: Amanecida of the Bejeweled Arrow", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_open_holes(player)) # Grievance Ascends set_rule(world.get_location("GA: Lower west ledge", player), lambda state: state._blasphemous_miasma_relic(player)) set_rule(world.get_location("GA: Miasma room floor", player), lambda state: state._blasphemous_miasma_relic(player)) set_rule(world.get_location("GA: Oil of the Pilgrims", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("GA: End of blood bridge", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("GA: Blood bridge Child of Moonlight", player), lambda state: state._blasphemous_blood_relic(player) and \ ((state._blasphemous_aubade(player) and \ state._blasphemous_ranged(player)) or \ state._blasphemous_cherub_21(player))) set_rule(world.get_location("GA: Lower east Child of Moonlight", player), lambda state: state._blasphemous_root_relic(player) or \ state._blasphemous_cherub_20(player)) set_rule(world.get_location("GA: Altasgracias' gift", player), lambda state: state._blasphemous_altasgracias_3(player)) set_rule(world.get_location("GA: Empty giant egg", player), lambda state: state._blasphemous_altasgracias_3(player) and \ state._blasphemous_egg(player)) # Hall of the Dawning set_rule(world.get_location("HotD: Laudes, the First of the Amanecidas", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_laudes_gate(player)) # Jondo set_rule(world.get_location("Jondo: Upper east chest", player), lambda state: state._blasphemous_fall_relic(player) or \ state._blasphemous_root_relic(player)) set_rule(world.get_location("Jondo: Upper west tree root", player), lambda state: state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player)) # Knot of the Three Words set_rule(world.get_location("KotTW: Gift from the Traitor", player), lambda state: state._blasphemous_wood_key(player) and \ state._blasphemous_eyes(player)) # Library of the Negated Words set_rule(world.get_location("LotNW: Root ceiling platform", player), lambda state: state._blasphemous_root_relic(player)) # to do: requires dive (sometimes opens with other skills?) set_rule(world.get_location("LotNW: Hidden floor", player), lambda state: state._blasphemous_open_holes(player)) set_rule(world.get_location("LotNW: Miasma hallway chest", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_miasma_relic(player)) set_rule(world.get_location("LotNW: Platform puzzle chest", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("LotNW: Elevator Child of Moonlight", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("LotNW: Red candle", player), lambda state: state._blasphemous_red_wax(player)) set_rule(world.get_location("LotNW: Twisted wood hidden wall", player), lambda state: state._blasphemous_wood_key(player)) # Mercy Dreams set_rule(world.get_location("MD: Blue candle", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_blue_wax(player)) set_rule(world.get_location("MD: Cave Child of Moonlight", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_cherub_24_33(player)) set_rule(world.get_location("MD: Behind gate to TSC", player), lambda state: state._blasphemous_bridge_access(player)) # Mother of Mothers set_rule(world.get_location("MoM: East chandelier platform", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_dawn_heart(player)) set_rule(world.get_location("MoM: Redento's treasure", player), lambda state: state._blasphemous_redento(player)) set_rule(world.get_location("MoM: Final meeting with Redento", player), lambda state: state._blasphemous_redento(player)) set_rule(world.get_location("MoM: Giant chandelier statue", player), lambda state: state._blasphemous_blood_relic(player)) # Mountains of the Endless Dusk set_rule(world.get_location("MotED: Platform above chasm", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("MotED: Blood platform alcove", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("MotED: Egg hatching", player), lambda state: state._blasphemous_pre_egg(player)) # to do: requires dive set_rule(world.get_location("MotED: Amanecida of the Golden Blades", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player)) # Mourning and Havoc set_rule(world.get_location("MaH: Upper east chest", player), lambda state: state._blasphemous_bridge_access(player) and \ state._blasphemous_root_relic(player)) set_rule(world.get_location("MaH: Sierpes' eye", player), lambda state: state._blasphemous_bridge_access(player) and \ (state._blasphemous_root_relic(player)) or \ state._blasphemous_water_relic(player) or \ state._blasphemous_dawn_heart(player)) set_rule(world.get_location("MaH: Sierpes", player), lambda state: state._blasphemous_bridge_access(player) and \ (state._blasphemous_root_relic(player)) or \ state._blasphemous_water_relic(player) or \ state._blasphemous_dawn_heart(player)) # Patio of the Silent Steps set_rule(world.get_location("PotSS: Second area ledge", player), lambda state: state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("PotSS: Third area upper ledge", player), lambda state: state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player)) set_rule(world.get_location("PotSS: Climb to WotHP", player), lambda state: (state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player)) or \ (state.can_reach(world.get_region("Wall of the Holy Prohibitions", player)) and \ state._blasphemous_bronze_key(player))) # to do: requires dive set_rule(world.get_location("PotSS: Amanecida of the Chiselled Steel", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player)) # Petrous # to do: requires dive set_rule(world.get_location("Petrous: Temple entrance", player), lambda state: state._blasphemous_open_holes(player)) # The Sleeping Canvases set_rule(world.get_location("TSC: Candle wax puzzle", player), lambda state: state._blasphemous_both_wax(player)) set_rule(world.get_location("TSC: Under elevator shaft", player), lambda state: state._blasphemous_fall_relic(player)) set_rule(world.get_location("TSC: Jocinero's 1st reward", player), lambda state: state._blasphemous_cherubs_20(player)) set_rule(world.get_location("TSC: Jocinero's final reward", player), lambda state: state._blasphemous_cherubs_all(player)) # The Holy Line set_rule(world.get_location("THL: Across blood platforms", player), lambda state: state._blasphemous_blood_relic(player)) set_rule(world.get_location("THL: Underground chest", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_water_relic(player)) # Wall of the Holy Prohibitions set_rule(world.get_location("WotHP: Upper east room, top bronze cell", player), lambda state: state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Upper east room, top silver cell", player), lambda state: state._blasphemous_silver_key(player)) set_rule(world.get_location("WotHP: Upper east room, center gold cell", player), lambda state: state._blasphemous_gold_key(player)) set_rule(world.get_location("WotHP: Upper west room, center gold cell", player), lambda state: state._blasphemous_gold_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Lower west room, bottom gold cell", player), lambda state: state._blasphemous_gold_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Upper west room, top silver cell", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Lower west room, top ledge", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Lower east room, hidden ledge", player), lambda state: state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Lower east room, bottom silver cell", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Lower east room, top bronze cell", player), lambda state: state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Lower east room, top silver cell", player), lambda state: state._blasphemous_silver_key(player)) set_rule(world.get_location("WotHP: Outside Child of Moonlight", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Oil of the Pilgrims", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Quirce, Returned By The Flames", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Collapsing floor ledge", player), lambda state: state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) set_rule(world.get_location("WotHP: Amanecida of the Molten Thorn", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player)) # Wasteland of the Buried Churches set_rule(world.get_location("WotBC: Under broken bridge", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_dawn_heart(player)) set_rule(world.get_location("WotBC: Cliffside Child of Moonlight", player), lambda state: state._blasphemous_cherub_38(player)) # Where Olive Trees Wither set_rule(world.get_location("WOTW: Gift for the tomb", player), lambda state: state._blasphemous_full_thimble(player)) set_rule(world.get_location("WOTW: Underground tomb", player), lambda state: state._blasphemous_flowers(player) and \ (state._blasphemous_full_thimble(player) or \ state._blasphemous_fall_relic(player))) set_rule(world.get_location("WOTW: Underground Child of Moonlight", player), lambda state: (state._blasphemous_full_thimble(player) or \ state._blasphemous_fall_relic(player)) and \ state._blasphemous_cherub_27(player)) set_rule(world.get_location("WOTW: Underground ledge", player), lambda state: (state._blasphemous_full_thimble(player) or \ state._blasphemous_fall_relic(player)) and \ state._blasphemous_blood_relic(player)) set_rule(world.get_location("WOTW: Upper east Child of Moonlight", player), lambda state: state._blasphemous_root_relic(player) or \ state._blasphemous_cherub_22_23_31_32(player)) set_rule(world.get_location("WOTW: Upper east statue", player), lambda state: state._blasphemous_root_relic(player)) set_rule(world.get_location("WOTW: Gemino's reward", player), lambda state: state._blasphemous_full_thimble(player)) # Various set_rule(world.get_location("Confessor Dungeon 1 extra", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 1 main", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 2 extra", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 2 main", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 3 extra", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 3 main", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 4 extra", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 4 main", player), lambda state: state._blasphemous_bead(player)) set_rule(world.get_location("Confessor Dungeon 5 extra", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_bridge_access(player)) set_rule(world.get_location("Confessor Dungeon 5 main", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_bridge_access(player)) set_rule(world.get_location("Confessor Dungeon 6 extra", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_bridge_access(player) and \ (state._blasphemous_1_mask(player) or \ state._blasphemous_blood_relic(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player))) set_rule(world.get_location("Confessor Dungeon 6 main", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_bridge_access(player) and \ (state._blasphemous_1_mask(player) or \ state._blasphemous_blood_relic(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player))) set_rule(world.get_location("Confessor Dungeon 7 extra", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_blood_relic(player)) set_rule(world.get_location("Confessor Dungeon 7 main", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_blood_relic(player)) # to do: requires dive set_rule(world.get_location("Defeat 1 Amanecida", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player)) set_rule(world.get_location("Defeat 2 Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_blood_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_bridge_access(player))) set_rule(world.get_location("Defeat 3 Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_blood_relic(player) and \ (state._blasphemous_root_relic(player) or \ (state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player)))) set_rule(world.get_location("Defeat 4 Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player)) set_rule(world.get_location("Defeat all Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player)) # expert logic if world.expert_logic[player]: # entrances for i in world.get_region("Ferrous Tree", player).entrances: set_rule(i, lambda state: state._blasphemous_ex_bridge_access(player)) for i in world.get_region("Mother of Mothers", player).entrances: set_rule(i, lambda state: state._blasphemous_ex_bridge_access(player)) for i in world.get_region("Patio of the Silent Steps", player).entrances: set_rule(i, lambda state: state._blasphemous_ex_bridge_access(player)) for i in world.get_region("The Sleeping Canvases", player).entrances: set_rule(i, lambda state: state._blasphemous_ex_bridge_access(player)) for i in world.get_region("Wall of the Holy Prohibitions", player).entrances: set_rule(i, lambda state: state._blasphemous_1_mask(player) and \ state._blasphemous_ex_bridge_access(player)) # locations set_rule(world.get_location("AR: Upper west shaft chest", player), lambda state: state._blasphemous_2_masks(player) and \ state._blasphemous_fall_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_ranged(player))) set_rule(world.get_location("BotTC: Esdras, of the Anointed Legion", player), lambda state: state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("BotTC: Esdras' gift", player), lambda state: state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("BotTC: Inside giant statue", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_laudes_gate(player) and \ state._blasphemous_1_mask(player)) set_rule(world.get_location("BotSS: Esdras' final gift", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_scapular(player) and \ state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("BotSS: Crisanta's gift", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_scapular(player) and \ state._blasphemous_heart_c(player) and \ state._blasphemous_3_masks(player) and \ state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("CoOLotCV: Lady of the Six Sorrows", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_high_key(player)) set_rule(world.get_location("CoOLotCV: Mask room", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_high_key(player)) set_rule(world.get_location("DC: Chalice room", player), lambda state: (state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player)))) or \ (state._blasphemous_fall_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_ranged(player)))) set_rule(world.get_location("DC: Mea Culpa altar", player), lambda state: state._blasphemous_chalice(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ (state._blasphemous_fall_relic(player) and \ (state._blasphemous_ranged(player) or \ state._blasphemous_root_relic(player))) or \ (state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))))) set_rule(world.get_location("HotD: Laudes, the First of the Amanecidas", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_laudes_gate(player)) set_rule(world.get_location("LotNW: Elevator Child of Moonlight", player), lambda state: state._blasphemous_blood_relic(player) and \ (state._blasphemous_cherub_22_23_31_32(player) and \ state._blasphemous_dawn_heart(player) and \ state._blasphemous_ranged(player)) or \ state._blasphemous_root_relic(player)) set_rule(world.get_location("MD: Cave Child of Moonlight", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_cherub_24_33(player)) set_rule(world.get_location("MD: Behind gate to TSC", player), lambda state: state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("MoM: East chandelier platform", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("MaH: Upper east chest", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ (state._blasphemous_root_relic(player)) or \ (state._blasphemous_dawn_heart(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("MaH: Sierpes' eye", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ (state._blasphemous_root_relic(player)) or \ state._blasphemous_dawn_heart(player) or \ state._blasphemous_water_relic(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("MaH: Sierpes", player), lambda state: state._blasphemous_ex_bridge_access(player) and \ (state._blasphemous_root_relic(player)) or \ state._blasphemous_dawn_heart(player) or \ state._blasphemous_water_relic(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("PotSS: Third area upper ledge", player), lambda state: state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("WotBC: Under broken bridge", player), lambda state: state._blasphemous_blood_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))) set_rule(world.get_location("Confessor Dungeon 5 extra", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Confessor Dungeon 5 main", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Confessor Dungeon 6 extra", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_ex_bridge_access(player) and \ (state._blasphemous_1_mask(player) or \ state._blasphemous_blood_relic(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player))) set_rule(world.get_location("Confessor Dungeon 6 main", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_ex_bridge_access(player) and \ (state._blasphemous_1_mask(player) or \ state._blasphemous_blood_relic(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_bronze_key(player))) set_rule(world.get_location("Confessor Dungeon 7 extra", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_blood_relic(player)) set_rule(world.get_location("Confessor Dungeon 7 main", player), lambda state: state._blasphemous_bead(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player) and \ state._blasphemous_blood_relic(player)) set_rule(world.get_location("Defeat 2 Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_blood_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_ex_bridge_access(player))) set_rule(world.get_location("Defeat 3 Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_blood_relic(player) and \ (state._blasphemous_root_relic(player) or \ (state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player)))) set_rule(world.get_location("Defeat 4 Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player)) set_rule(world.get_location("Defeat all Amanecidas", player), lambda state: state._blasphemous_bell(player) and \ state._blasphemous_open_holes(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_blood_relic(player) and \ state._blasphemous_root_relic(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_silver_key(player)) # skill rando if world.skill_randomizer[player] and not world.expert_logic[player]: set_rule(world.get_location("Skill 1, Tier 3", player), lambda state: state._blasphemous_bridge_access(player)) set_rule(world.get_location("Skill 5, Tier 3", player), lambda state: state._blasphemous_bridge_access(player)) set_rule(world.get_location("Skill 3, Tier 2", player), lambda state: state._blasphemous_bridge_access(player)) set_rule(world.get_location("Skill 2, Tier 3", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_2_masks(player) and \ state._blasphemous_bridge_access(player)) set_rule(world.get_location("Skill 4, Tier 3", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_2_masks(player) and \ state._blasphemous_bridge_access(player)) set_rule(world.get_location("Skill 3, Tier 3", player), lambda state: state._blasphemous_chalice(player) and \ state._blasphemous_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ state._blasphemous_root_relic(player)) elif world.skill_randomizer[player] and world.expert_logic[player]: set_rule(world.get_location("Skill 1, Tier 3", player), lambda state: state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Skill 5, Tier 3", player), lambda state: state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Skill 3, Tier 2", player), lambda state: state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Skill 2, Tier 3", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_2_masks(player) and \ state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Skill 4, Tier 3", player), lambda state: state._blasphemous_blood_relic(player) and \ state._blasphemous_miasma_relic(player) and \ state._blasphemous_2_masks(player) and \ state._blasphemous_ex_bridge_access(player)) set_rule(world.get_location("Skill 3, Tier 3", player), lambda state: state._blasphemous_chalice(player) and \ state._blasphemous_ex_bridge_access(player) and \ state._blasphemous_1_mask(player) and \ state._blasphemous_bronze_key(player) and \ (state._blasphemous_fall_relic(player) and \ (state._blasphemous_ranged(player) or \ state._blasphemous_root_relic(player))) or \ (state._blasphemous_miasma_relic(player) and \ state._blasphemous_water_relic(player) and \ (state._blasphemous_root_relic(player) or \ state._blasphemous_dawn_heart(player) or \ (state._blasphemous_wheel(player) and \ state._blasphemous_ranged(player))))) # difficulty (easy) if world.difficulty[player].value == 0: for i in world.get_region("Desecrated Cistern", player).entrances: add_rule(i, lambda state: state._blasphemous_wound_boss_easy(player)) for i in world.get_region("Ferrous Tree", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_easy(player)) for i in world.get_region("Patio of the Silent Steps", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_easy(player)) for i in world.get_region("The Sleeping Canvases", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_easy(player)) for i in world.get_region("Deambulatory of His Holiness", player).entrances: add_rule(i, lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("Albero: Donate 5000 Tears", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Albero: Donate 50000 Tears", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Albero: Tirso's final reward", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("Ossuary: Isidora, Voice of the Dead", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("AR: Crisanta of the Wrapped Agony", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("BotTC: Esdras, of the Anointed Legion", player), lambda state: state._blasphemous_esdras_boss_easy(player)) add_rule(world.get_location("BotTC: Esdras' gift", player), lambda state: state._blasphemous_esdras_boss_easy(player)) add_rule(world.get_location("BotTC: Inside giant statue", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("BotSS: Crisanta's gift", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("CoOLotCV: Lady of the Six Sorrows", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("CoOLotCV: Mask room", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("GotP: Amanecida of the Bejeweled Arrow", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("HotD: Laudes, the First of the Amanecidas", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("LotNW: Elevator Child of Moonlight", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("LotNW: Mask room", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("LotNW: Mea Culpa altar", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("LotNW: Red candle", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("MD: Blue candle", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("MD: Cave Child of Moonlight", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("MD: Behind gate to TSC", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("MoM: Melquiades, The Exhumed Archbishop", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("MoM: Mask room", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("MotED: Amanecida of the Golden Blades", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("MaH: Sierpes' eye", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("MaH: Sierpes", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("PotSS: Amanecida of the Chiselled Steel", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("TSC: Under elevator shaft", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("TSC: Exposito, Scion of Abjuration", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("WotHP: Quirce, Returned By The Flames", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("WotHP: Collapsing floor ledge", player), lambda state: state._blasphemous_mask_boss_easy(player)) add_rule(world.get_location("WotHP: Amanecida of the Molten Thorn", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 4 extra", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 4 main", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 5 extra", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 5 main", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 6 extra", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 6 main", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 7 extra", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Confessor Dungeon 7 main", player), lambda state: state._blasphemous_wound_boss_easy(player)) add_rule(world.get_location("Defeat 1 Amanecida", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("Defeat 2 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("Defeat 3 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("Defeat 4 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_easy(player)) add_rule(world.get_location("Defeat all Amanecidas", player), lambda state: state._blasphemous_endgame_boss_easy(player)) # difficulty (normal) elif world.difficulty[player].value == 1: for i in world.get_region("Desecrated Cistern", player).entrances: add_rule(i, lambda state: state._blasphemous_wound_boss_normal(player)) for i in world.get_region("Ferrous Tree", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_normal(player)) for i in world.get_region("Patio of the Silent Steps", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_normal(player)) for i in world.get_region("The Sleeping Canvases", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_normal(player)) for i in world.get_region("Deambulatory of His Holiness", player).entrances: add_rule(i, lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("Albero: Donate 5000 Tears", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Albero: Donate 50000 Tears", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Albero: Tirso's final reward", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("Ossuary: Isidora, Voice of the Dead", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("AR: Crisanta of the Wrapped Agony", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("BotTC: Esdras, of the Anointed Legion", player), lambda state: state._blasphemous_esdras_boss_normal(player)) add_rule(world.get_location("BotTC: Esdras' gift", player), lambda state: state._blasphemous_esdras_boss_normal(player)) add_rule(world.get_location("BotTC: Inside giant statue", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("BotSS: Crisanta's gift", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("CoOLotCV: Lady of the Six Sorrows", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("CoOLotCV: Mask room", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("GotP: Amanecida of the Bejeweled Arrow", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("HotD: Laudes, the First of the Amanecidas", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("LotNW: Elevator Child of Moonlight", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("LotNW: Mask room", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("LotNW: Mea Culpa altar", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("LotNW: Red candle", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("MD: Blue candle", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("MD: Cave Child of Moonlight", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("MD: Behind gate to TSC", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("MoM: Melquiades, The Exhumed Archbishop", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("MoM: Mask room", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("MotED: Amanecida of the Golden Blades", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("MaH: Sierpes' eye", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("MaH: Sierpes", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("PotSS: Amanecida of the Chiselled Steel", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("TSC: Under elevator shaft", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("TSC: Exposito, Scion of Abjuration", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("WotHP: Quirce, Returned By The Flames", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("WotHP: Collapsing floor ledge", player), lambda state: state._blasphemous_mask_boss_normal(player)) add_rule(world.get_location("WotHP: Amanecida of the Molten Thorn", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 4 extra", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 4 main", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 5 extra", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 5 main", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 6 extra", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 6 main", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 7 extra", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Confessor Dungeon 7 main", player), lambda state: state._blasphemous_wound_boss_normal(player)) add_rule(world.get_location("Defeat 1 Amanecida", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("Defeat 2 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("Defeat 3 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("Defeat 4 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_normal(player)) add_rule(world.get_location("Defeat all Amanecidas", player), lambda state: state._blasphemous_endgame_boss_normal(player)) # difficulty (hard) elif world.difficulty[player].value == 2: for i in world.get_region("Desecrated Cistern", player).entrances: add_rule(i, lambda state: state._blasphemous_wound_boss_hard(player)) for i in world.get_region("Ferrous Tree", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_hard(player)) for i in world.get_region("Patio of the Silent Steps", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_hard(player)) for i in world.get_region("The Sleeping Canvases", player).entrances: add_rule(i, lambda state: state._blasphemous_esdras_boss_hard(player)) for i in world.get_region("Deambulatory of His Holiness", player).entrances: add_rule(i, lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("Albero: Donate 5000 Tears", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Albero: Donate 50000 Tears", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Albero: Tirso's final reward", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("Ossuary: Isidora, Voice of the Dead", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("AR: Crisanta of the Wrapped Agony", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("BotTC: Esdras, of the Anointed Legion", player), lambda state: state._blasphemous_esdras_boss_hard(player)) add_rule(world.get_location("BotTC: Esdras' gift", player), lambda state: state._blasphemous_esdras_boss_hard(player)) add_rule(world.get_location("BotTC: Inside giant statue", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("BotSS: Crisanta's gift", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("CoOLotCV: Lady of the Six Sorrows", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("CoOLotCV: Mask room", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("GotP: Amanecida of the Bejeweled Arrow", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("HotD: Laudes, the First of the Amanecidas", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("LotNW: Elevator Child of Moonlight", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("LotNW: Mask room", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("LotNW: Mea Culpa altar", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("LotNW: Red candle", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("MD: Blue candle", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("MD: Cave Child of Moonlight", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("MD: Behind gate to TSC", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("MoM: Melquiades, The Exhumed Archbishop", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("MoM: Mask room", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("MotED: Amanecida of the Golden Blades", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("MaH: Sierpes' eye", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("MaH: Sierpes", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("PotSS: Amanecida of the Chiselled Steel", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("TSC: Under elevator shaft", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("TSC: Exposito, Scion of Abjuration", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("WotHP: Quirce, Returned By The Flames", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("WotHP: Collapsing floor ledge", player), lambda state: state._blasphemous_mask_boss_hard(player)) add_rule(world.get_location("WotHP: Amanecida of the Molten Thorn", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 4 extra", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 4 main", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 5 extra", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 5 main", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 6 extra", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 6 main", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 7 extra", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Confessor Dungeon 7 main", player), lambda state: state._blasphemous_wound_boss_hard(player)) add_rule(world.get_location("Defeat 1 Amanecida", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("Defeat 2 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("Defeat 3 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("Defeat 4 Amanecidas", player), lambda state: state._blasphemous_endgame_boss_hard(player)) add_rule(world.get_location("Defeat all Amanecidas", player), lambda state: state._blasphemous_endgame_boss_hard(player))