From 389606619398007b326d813b535ec94738aa75ab Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Tue, 29 Jun 2021 10:36:53 -0700 Subject: [PATCH] Reimplement --securerandom Seeds should be reproducable without the flag passed, and unreproducable with the flag passed. With --securerandom, generate a 9-char alphanumeric string to use to make filenames differ. --- Bosses.py | 2 +- DoorShuffle.py | 2 +- DungeonGenerator.py | 2 +- DungeonRandomizer.py | 2 +- Dungeons.py | 2 +- EntranceShuffle.py | 2 +- Fill.py | 2 +- ItemList.py | 2 +- Main.py | 11 ++++++----- Mystery.py | 2 +- Plando.py | 2 +- PotShuffle.py | 2 +- Rom.py | 5 +++-- resources/app/cli/lang/de.json | 2 +- resources/app/cli/lang/en.json | 2 +- resources/app/cli/lang/es.json | 2 +- 16 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Bosses.py b/Bosses.py index ebf8b4dd..253717bd 100644 --- a/Bosses.py +++ b/Bosses.py @@ -1,5 +1,5 @@ import logging -import random +import RaceRandom as random from BaseClasses import Boss from Fill import FillError diff --git a/DoorShuffle.py b/DoorShuffle.py index ee38f00c..acb0dee8 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1,4 +1,4 @@ -import random +import RaceRandom as random from collections import defaultdict, deque import logging import operator as op diff --git a/DungeonGenerator.py b/DungeonGenerator.py index c8599748..1c49cba0 100644 --- a/DungeonGenerator.py +++ b/DungeonGenerator.py @@ -1,4 +1,4 @@ -import random +import RaceRandom as random import collections import itertools from collections import defaultdict, deque diff --git a/DungeonRandomizer.py b/DungeonRandomizer.py index b1c02c81..d24e81d6 100755 --- a/DungeonRandomizer.py +++ b/DungeonRandomizer.py @@ -3,7 +3,7 @@ import argparse import copy import os import logging -import random +import RaceRandom as random import textwrap import shlex import sys diff --git a/Dungeons.py b/Dungeons.py index d5297400..596da920 100644 --- a/Dungeons.py +++ b/Dungeons.py @@ -1,4 +1,4 @@ -import random +import RaceRandom as random from BaseClasses import Dungeon from Bosses import BossFactory diff --git a/EntranceShuffle.py b/EntranceShuffle.py index e78b35b8..c1af7956 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -1,4 +1,4 @@ -import random +import RaceRandom as random # ToDo: With shuffle_ganon option, prevent gtower from linking to an exit only location through a 2 entrance cave. from collections import defaultdict diff --git a/Fill.py b/Fill.py index c1488113..48f020c3 100644 --- a/Fill.py +++ b/Fill.py @@ -1,4 +1,4 @@ -import random +import RaceRandom as random import logging from BaseClasses import CollectionState diff --git a/ItemList.py b/ItemList.py index 62648862..a16219f4 100644 --- a/ItemList.py +++ b/ItemList.py @@ -1,7 +1,7 @@ from collections import namedtuple import logging import math -import random +import RaceRandom as random from BaseClasses import Region, RegionType, Shop, ShopType, Location, CollectionState from Bosses import place_bosses diff --git a/Main.py b/Main.py index fb44aa7c..072d12dd 100644 --- a/Main.py +++ b/Main.py @@ -4,7 +4,8 @@ from itertools import zip_longest import json import logging import os -import random +import RaceRandom as random +import string import time import zlib @@ -41,8 +42,8 @@ def main(args, seed=None, fish=None): start = time.perf_counter() - # if args.securerandom: - # random.use_secure() + if args.securerandom: + random.use_secure() # initialize the world if args.code: @@ -61,7 +62,7 @@ def main(args, seed=None, fish=None): random.seed(world.seed) if args.securerandom: - world.seed = None + world.seed = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(9)) world.remote_items = args.remote_items.copy() world.mapshuffle = args.mapshuffle.copy() @@ -332,7 +333,7 @@ def main(args, seed=None, fish=None): logger.info(world.fish.translate("cli","cli","made.playthrough") % (YES if (args.calc_playthrough) else NO)) logger.info(world.fish.translate("cli","cli","made.spoiler") % (YES if (not args.jsonout and args.create_spoiler) else NO)) logger.info(world.fish.translate("cli","cli","used.enemizer") % (YES if enemized else NO)) - logger.info(world.fish.translate("cli","cli","seed") + ": %d", world.seed) + logger.info(world.fish.translate("cli","cli","seed") + ": %s", world.seed) logger.info(world.fish.translate("cli","cli","total.time"), time.perf_counter() - start) # print_wiki_doors_by_room(dungeon_regions,world,1) diff --git a/Mystery.py b/Mystery.py index 6d0189f0..0b913455 100644 --- a/Mystery.py +++ b/Mystery.py @@ -1,6 +1,6 @@ import argparse import logging -import random +import RaceRandom as random import urllib.request import urllib.parse import yaml diff --git a/Plando.py b/Plando.py index 5b66876e..c32c75cd 100755 --- a/Plando.py +++ b/Plando.py @@ -3,7 +3,7 @@ import argparse import hashlib import logging import os -import random +import RaceRandom as random import time import sys diff --git a/PotShuffle.py b/PotShuffle.py index e8e6d3ce..d62f52eb 100644 --- a/PotShuffle.py +++ b/PotShuffle.py @@ -275,7 +275,7 @@ vanilla_pots = { def shuffle_pots(world, player): - import random + import RaceRandom as random new_pot_contents = {} diff --git a/Rom.py b/Rom.py index 5c2fae02..084a456a 100644 --- a/Rom.py +++ b/Rom.py @@ -5,7 +5,7 @@ import json import hashlib import logging import os -import random +import RaceRandom as random import struct import sys import subprocess @@ -1542,8 +1542,9 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): # set rom name # 21 bytes from Main import __version__ + seedstring = f'{world.seed:09}' if isinstance(world.seed, int) else world.seed # todo: change to DR when Enemizer is okay with DR - rom.name = bytearray(f'ER{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{world.seed:09}\0', 'utf8')[:21] + rom.name = bytearray(f'ER{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{seedstring}\0', 'utf8')[:21] rom.name.extend([0] * (21 - len(rom.name))) rom.write_bytes(0x7FC0, rom.name) diff --git a/resources/app/cli/lang/de.json b/resources/app/cli/lang/de.json index d2c5d523..6a72d688 100644 --- a/resources/app/cli/lang/de.json +++ b/resources/app/cli/lang/de.json @@ -1,6 +1,6 @@ { "cli": { - "app.title": "ALttP Tür Randomisier Version %s - Nummer: %d, Code: %s", + "app.title": "ALttP Tür Randomisier Version %s - Nummer: %s, Code: %s", "shuffling.world": "Welt wird durchmischt.", "generating.itempool": "Generier Gegenstandsbasis.", "calc.access.rules": "Berechne Zugriffsregeln.", diff --git a/resources/app/cli/lang/en.json b/resources/app/cli/lang/en.json index 145667ef..6dc4418d 100644 --- a/resources/app/cli/lang/en.json +++ b/resources/app/cli/lang/en.json @@ -2,7 +2,7 @@ "cli": { "yes": "Yes", "no": "No", - "app.title": "ALttP Door Randomizer Version %s - Seed: %d, Code: %s", + "app.title": "ALttP Door Randomizer Version %s - Seed: %s, Code: %s", "version": "Version", "seed": "Seed", "player": "Player", diff --git a/resources/app/cli/lang/es.json b/resources/app/cli/lang/es.json index def18849..8bff9dd0 100644 --- a/resources/app/cli/lang/es.json +++ b/resources/app/cli/lang/es.json @@ -1,6 +1,6 @@ { "cli": { - "app.title": "ALttP Puerta Aleatorizador Versión %s - Número: %d, Código: %s", + "app.title": "ALttP Puerta Aleatorizador Versión %s - Número: %s, Código: %s", "player": "Jugador", "shuffling.world": "Barajando el Mundo", "shuffling.dungeons": "Barajando Mazmorras",