From 1aa903c909d6441915e4ad127e846026b2147bde Mon Sep 17 00:00:00 2001 From: Xopar Date: Sat, 25 Feb 2023 04:28:18 -0600 Subject: [PATCH] MASSIVE randomizer version update! --- RandomSettingsGenerator.py | 2 + conditionals.py | 14 +++++++ roll_settings.py | 9 ++++- rsl_tools.py | 4 +- rslversion.py | 6 +-- weights/rsl_season5.json | 76 ++++++++++++++++++++++++++++++++------ 6 files changed, 94 insertions(+), 17 deletions(-) diff --git a/RandomSettingsGenerator.py b/RandomSettingsGenerator.py index ba64c03..24f259f 100644 --- a/RandomSettingsGenerator.py +++ b/RandomSettingsGenerator.py @@ -137,6 +137,8 @@ def main(): if not os.path.isdir('failed_settings'): os.mkdir('failed_settings') os.rename(os.path.join('data', plando_filename), os.path.join('failed_settings', plando_filename)) + with open(os.path.join('failed_settings', plando_filename+'_errlog'), 'w+') as failed_err_msg: + failed_err_msg.write(completed_process.stderr) if i == args["plando_retries"]-1 and completed_process.returncode != 0: raise tools.RandomizerError(completed_process.stderr) diff --git a/conditionals.py b/conditionals.py index 0313278..21b53cf 100644 --- a/conditionals.py +++ b/conditionals.py @@ -229,3 +229,17 @@ def invert_dungeons_mq_count(random_settings, weight_dict, **kwargs): new_mq_dungeons_count = 12 - current_mq_dungeons_count random_settings['mq_dungeons_count'] = new_mq_dungeons_count + + +def replicate_old_child_trade(random_settings, extra_starting_items, **kwargs): + """ Emulate old behavior for sstarting child trade. This should be removed + once season 6 begins and is only here to keep season 5 support. + """ + ctrade = random.choices(["vanilla", "shuffle", "scz"], weights=[1,1,2])[0] + if ctrade == "vanilla": + random_settings["shuffle_child_trade"] = [] + elif ctrade == "shuffle": + random_settings["shuffle_child_trade"] = ["Weird Egg"] + else: + random_settings["shuffle_child_trade"] = [] + extra_starting_items['starting_items'] += ["zeldas_letter"] diff --git a/roll_settings.py b/roll_settings.py index 6bc43f1..90c85b4 100644 --- a/roll_settings.py +++ b/roll_settings.py @@ -6,6 +6,7 @@ import conditionals as conds from rslversion import __version__ sys.path.append("randomizer") +from randomizer.ItemPool import trade_items, child_trade_items from randomizer.SettingsList import get_settings_from_tab, get_settings_from_section, get_setting_info from randomizer.StartingItems import inventory, songs, equipment @@ -58,7 +59,13 @@ def geometric_weights(N, startat=0, rtype="list"): def draw_starting_item_pool(random_settings, start_with): """ Select starting items, songs, and equipment. """ - random_settings["starting_items"] = draw_choices_from_pool(inventory) + # random_settings["starting_items"] = draw_choices_from_pool(inventory) + random_settings["starting_items"] = draw_choices_from_pool({ + name: info + for name, info in inventory.items() + if (info.itemname not in trade_items or info.itemname in random_settings["adult_trade_start"]) + and (info.itemname not in child_trade_items or info.itemname in random_settings["shuffle_child_trade"] or info.itemname == 'Zeldas Letter') + }) random_settings["starting_songs"] = draw_choices_from_pool(songs) random_settings["starting_equipment"] = draw_choices_from_pool(equipment) diff --git a/rsl_tools.py b/rsl_tools.py index 267ae55..4bcaf13 100644 --- a/rsl_tools.py +++ b/rsl_tools.py @@ -79,7 +79,7 @@ def find_rom_file(): def check_for_setting_changes(weights, randomizer_settings): """ Function to check for new settings and options when the randomizer is updated. """ ignore_list = ["tricks_list_msg", "bingosync_url", "dungeon_shortcuts", "misc_hints", "mix_entrance_pools", "mq_dungeons_specific", - "key_rings", "empty_dungeons_specific", "empty_dungeons_count", "adult_trade_start", "spawn_positions"] + "key_rings", "empty_dungeons_specific", "empty_dungeons_count", "adult_trade_start", "spawn_positions", "hint_dist"] # Find new or changed settings by name old_settings = list(set(weights.keys()) - set(randomizer_settings.keys())) @@ -97,6 +97,8 @@ def check_for_setting_changes(weights, randomizer_settings): # Find new or changed options for setting in weights.keys(): + if setting in ignore_list: + continue # Randomizer has appropriate types for each variable but we store options as strings randomizer_settings_strings = set(map(lambda x: x.lower(), map(str, list(randomizer_settings[setting].keys())))) old_options = list(set(weights[setting].keys()) - randomizer_settings_strings) diff --git a/rslversion.py b/rslversion.py index dba776d..914b2f6 100644 --- a/rslversion.py +++ b/rslversion.py @@ -1,4 +1,4 @@ -__version__ = "2.3.9" +__version__ = "2.4.1" -randomizer_version = '6.2.238 R-1' -randomizer_commit = '0843b2a100de9a9669aabc35f684913fccfc4d10' +randomizer_version = '7.1.60 R-1' +randomizer_commit = 'aaaa7b9d91a5a13b468528748352d69431b2a1d4' diff --git a/weights/rsl_season5.json b/weights/rsl_season5.json index 3e065bf..76fd63e 100644 --- a/weights/rsl_season5.json +++ b/weights/rsl_season5.json @@ -24,7 +24,8 @@ "adjust_chaos_hint_distro": [true], "exclude_mapcompass_info_remove": [true], "ohko_starts_with_nayrus": [true], - "invert_dungeons_mq_count": [false, 0] + "invert_dungeons_mq_count": [false, 0], + "replicate_old_child_trade": [true] }, "tricks": [ "logic_fewer_tunic_requirements", @@ -124,6 +125,23 @@ "child": 100, "adult": 100 } + }, + "shuffle_child_trade": { + "global_enable_percentage": 0, + "geometric": false, + "opt_percentage": { + "weird egg": 0, + "chicken": 0, + "zeldas letter": 0, + "keaton mask": 0, + "skull mask": 0, + "spooky mask": 0, + "bunny hood": 0, + "goron mask": 0, + "zora mask": 0, + "gerudo mask": 0, + "mask of truth": 0 + } } }, "weights": { @@ -132,6 +150,49 @@ "glitched": 0, "none": 0 }, + "shuffle_freestanding_items": { + "off": 1, + "all": 0, + "overworld": 0, + "dungeons": 0 + }, + "shuffle_pots": { + "off": 1, + "all": 0, + "overworld": 0, + "dungeons": 0 + }, + "shuffle_crates": { + "off": 1, + "all": 0, + "overworld": 0, + "dungeons": 0 + }, + "shuffle_beehives": { + "true": 0, + "false": 1 + }, + "correct_potcrate_appearances": { + "off": 0, + "textures_content": 0, + "textures_unchecked": 1 + }, + "shuffle_gerudo_valley_river_exit": { + "true": 0, + "false": 1 + }, + "keyring_give_bk": { + "true": 0, + "false": 1 + }, + "free_bombchu_drops": { + "true": 1, + "false": 0 + }, + "adult_trade_shuffle": { + "true": 0, + "false": 1 + }, "open_forest": { "open": 1, "closed_deku": 1, @@ -194,10 +255,6 @@ "true": 3, "false": 17 }, - "bombchus_in_logic": { - "true": 1, - "false": 1 - }, "one_item_per_dungeon": { "true": 0, "false": 1 @@ -332,11 +389,6 @@ "true": 1, "false": 1 }, - "shuffle_child_trade": { - "vanilla": 1, - "shuffle": 1, - "skip_child_zelda": 2 - }, "shuffle_gerudo_card": { "true": 1, "false": 1 @@ -345,7 +397,7 @@ "true": 1, "false": 1 }, - "shuffle_medigoron_carpet_salesman": { + "shuffle_expensive_merchants": { "true": 2, "false": 3 }, @@ -605,7 +657,7 @@ "normal": 10, "double": 4, "quadruple": 2, - "ohko": 1 + "ohko": 100000 }, "deadly_bonks": { "none": 19,