Merged DR v1.0.1.2

This commit is contained in:
codemann8
2022-08-29 19:38:06 -05:00
6 changed files with 29 additions and 24 deletions

View File

@@ -1337,16 +1337,16 @@ class CollectionState(object):
return self.has('Bow', player) and (self.can_buy_unlimited('Single Arrow', player) or self.has('Single Arrow', player)) return self.has('Bow', player) and (self.can_buy_unlimited('Single Arrow', player) or self.has('Single Arrow', player))
return self.has('Bow', player) return self.has('Bow', player)
def can_get_good_bee(self, player): # def can_get_good_bee(self, player):
cave = self.world.get_region('Good Bee Cave', player) # cave = self.world.get_region('Good Bee Cave', player)
return ( # return (
self.can_use_bombs(player) and # self.can_use_bombs(player) and
self.has_bottle(player) and # self.has_bottle(player) and
self.has('Bug Catching Net', player) and # self.has('Bug Catching Net', player) and
(self.has_Boots(player) or (self.has_sword(player) and self.has('Quake', player))) and # (self.has_Boots(player) or (self.has_sword(player) and self.has('Quake', player))) and
cave.can_reach(self) and # cave.can_reach(self) and
self.is_not_bunny(cave, player) # self.is_not_bunny(cave, player)
) # )
def has_beaten_aga(self, player): def has_beaten_aga(self, player):
return self.has('Beat Agahnim 1', player) and (self.world.mode[player] != 'standard' or self.has('Zelda Delivered', player)) return self.has('Beat Agahnim 1', player) and (self.world.mode[player] != 'standard' or self.has('Zelda Delivered', player))

View File

@@ -61,8 +61,7 @@ def MothulaDefeatRule(state, player):
# TODO: Not sure how much (if any) extend magic is needed for these two, since they only apply # TODO: Not sure how much (if any) extend magic is needed for these two, since they only apply
# to non-vanilla locations, so are harder to test, so sticking with what VT has for now: # to non-vanilla locations, so are harder to test, so sticking with what VT has for now:
(state.has('Cane of Somaria', player) and state.can_extend_magic(player, 16)) or (state.has('Cane of Somaria', player) and state.can_extend_magic(player, 16)) or
(state.has('Cane of Byrna', player) and state.can_extend_magic(player, 16)) or (state.has('Cane of Byrna', player) and state.can_extend_magic(player, 16))
state.can_get_good_bee(player)
) )
def BlindDefeatRule(state, player): def BlindDefeatRule(state, player):

View File

@@ -48,6 +48,9 @@ def fill_dungeons_restrictive(world, shuffled_locations):
bigs, smalls, others = [], [], [] bigs, smalls, others = [], [], []
for i in dungeon_items: for i in dungeon_items:
(bigs if i.bigkey else smalls if i.smallkey else others).append(i) (bigs if i.bigkey else smalls if i.smallkey else others).append(i)
for i in world.itempool:
if i.smallkey and world.keyshuffle[i.player]:
smalls.append(i)
def fill(base_state, items, key_pool): def fill(base_state, items, key_pool):
fill_restrictive(world, base_state, shuffled_locations, items, key_pool, True) fill_restrictive(world, base_state, shuffled_locations, items, key_pool, True)

View File

@@ -1,11 +1,11 @@
import argparse import argparse
import logging import logging
from pathlib import Path
import os
import RaceRandom as random import RaceRandom as random
import urllib.request import urllib.request
import urllib.parse import urllib.parse
import yaml import yaml
import os
from pathlib import Path
from DungeonRandomizer import parse_cli from DungeonRandomizer import parse_cli
from Main import main as DRMain from Main import main as DRMain
@@ -108,14 +108,11 @@ def main():
DRMain(erargs, seed, BabelFish()) DRMain(erargs, seed, BabelFish())
def get_weights(path): def get_weights(path):
try: if os.path.exists(Path(path)):
if os.path.exists(Path(path)): with open(path, "r", encoding="utf-8") as f:
with open(path, "r", encoding="utf-8") as f: return yaml.load(f, Loader=yaml.SafeLoader)
return yaml.load(f, Loader=yaml.SafeLoader) elif urllib.parse.urlparse(path).scheme in ['http', 'https']:
elif urllib.parse.urlparse(path).scheme in ['http', 'https']: return yaml.load(urllib.request.urlopen(path), Loader=yaml.FullLoader)
return yaml.load(urllib.request.urlopen(path), Loader=yaml.FullLoader)
except Exception as e:
raise Exception(f'Failed to read weights file: {e}')
def roll_settings(weights): def roll_settings(weights):
def get_choice(option, root=None): def get_choice(option, root=None):

View File

@@ -184,10 +184,14 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o
#### Unstable #### Unstable
* 1.0.1.2 * 1.0.1.2
* Removed "good bee" as an in-logic way of killing Mothula
* Fixed an issue with Mystery generation and Windows path
* Fixed an issue with small key bias rework * Fixed an issue with small key bias rework
* Fixed an issue where trinity goal would open pyramid unexpectedly. (No longer does so if ER mdoe is shuffling holes). Crystals goal updated to match that behavior. * Fixed an issue where trinity goal would open pyramid unexpectedly. (No longer does so if ER mdoe is shuffling holes). Crystals goal updated to match that behavior.
* Fixed a playthrough issue that was not respecting pot rules * Fixed a playthrough issue that was not respecting pot rules
* Fixed an issue that was conflicting with downstream OWR project * Fixed an issue that was conflicting with downstream OWR project
* Fixed an issue with inverted and certain pottery settings
* Fixed an issue with small keys being shuffled and big keys not (key distribution)
* 1.0.1.1 * 1.0.1.1
* Fixed the pots in Mire Storyteller/ Dark Desert Hint to be colorized when they should be * Fixed the pots in Mire Storyteller/ Dark Desert Hint to be colorized when they should be
* Certain pot items no longer reload when reloading the supertile (matches original pot behavior better) * Certain pot items no longer reload when reloading the supertile (matches original pot behavior better)

View File

@@ -356,8 +356,10 @@ def global_rules(world, player):
# byrna could work with sufficient magic # byrna could work with sufficient magic
set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) set_rule(world.get_location('Misery Mire - Spike Chest', player), lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player))
loc = world.get_location('Misery Mire - Spikes Pot Key', player) loc = world.get_location('Misery Mire - Spikes Pot Key', player)
if loc.pot is not None and loc.pot.x == 48 and loc.pot.y == 28: # pot shuffled to spike area if loc.pot:
set_rule(loc, lambda state: (state.world.can_take_damage and state.has_hearts(player, 4)) or state.has('Cane of Byrna', player) or state.has('Cape', player)) if loc.pot.x == 48 and loc.pot.y == 28: # pot shuffled to spike area
set_rule(loc, lambda state: (state.world.can_take_damage and state.has_hearts(player, 4))
or state.has('Cane of Byrna', player) or state.has('Cape', player))
set_rule(world.get_entrance('Mire Left Bridge Hook Path', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('Mire Left Bridge Hook Path', player), lambda state: state.has('Hookshot', player))
set_rule(world.get_entrance('Mire Tile Room NW', player), lambda state: state.has_fire_source(player)) set_rule(world.get_entrance('Mire Tile Room NW', player), lambda state: state.has_fire_source(player))
set_rule(world.get_entrance('Mire Attic Hint Hole', player), lambda state: state.has_fire_source(player)) set_rule(world.get_entrance('Mire Attic Hint Hole', player), lambda state: state.has_fire_source(player))