This commit is contained in:
2026-01-25 13:59:45 -06:00
parent ec81a900ef
commit 78dd5c65fc
105 changed files with 919 additions and 406 deletions

View File

@@ -2,6 +2,7 @@ import json
import locale
import os
class BabelFish():
def __init__(self,subpath=["resources","app","meta"],lang=None):
localization_string = locale.getdefaultlocale()[0] #get set localization

View File

@@ -1,17 +1,18 @@
import os
import urllib.request
import urllib.parse
import yaml
from typing import Any
from yaml.representer import Representer
from Utils import HexInt, hex_representer
import urllib.request
from collections import defaultdict
from pathlib import Path
from typing import Any
import yaml
from yaml.representer import Representer
import RaceRandom as random
from BaseClasses import LocationType, DoorType
from BaseClasses import DoorType, LocationType
from OverworldShuffle import default_flute_connections, flute_data
from source.tools.MysteryUtils import roll_settings, get_weights
from source.tools.MysteryUtils import get_weights, roll_settings
from Utils import HexInt, hex_representer
class CustomSettings(object):

View File

@@ -1,5 +1,20 @@
from tkinter import Button, Canvas, Label, LabelFrame, Frame, PhotoImage, Scrollbar, Toplevel, LEFT, BOTTOM, X, RIGHT, TOP
import os
from tkinter import (
BOTTOM,
LEFT,
RIGHT,
TOP,
Button,
Canvas,
Frame,
Label,
LabelFrame,
PhotoImage,
Scrollbar,
Toplevel,
X,
)
from GuiUtils import ToolTips, set_icon
from Utils import local_path

View File

@@ -1,5 +1,6 @@
from enum import IntEnum
import random
from enum import IntEnum
from Utils import int16_as_bytes, snes_to_pc

View File

@@ -1,16 +1,36 @@
from tkinter import filedialog, messagebox, Button, Canvas, Label, LabelFrame, Frame, PhotoImage, Scrollbar, Toplevel, ALL, LEFT, BOTTOM, X, RIGHT, TOP, EW, NS
from glob import glob
import json
import os
import random
import shutil
import ssl
import webbrowser
from glob import glob
from tkinter import (
ALL,
BOTTOM,
EW,
LEFT,
NS,
RIGHT,
TOP,
Button,
Canvas,
Frame,
Label,
LabelFrame,
PhotoImage,
Scrollbar,
Toplevel,
X,
filedialog,
messagebox,
)
from urllib.parse import urlparse
from urllib.request import urlopen
import webbrowser
from GuiUtils import ToolTips, set_icon, BackgroundTaskProgress
from GuiUtils import BackgroundTaskProgress, ToolTips, set_icon
from Rom import Sprite
from Utils import is_bundled, local_path, output_path, open_file
from Utils import is_bundled, local_path, open_file, output_path
class SpriteSelector(object):

View File

@@ -1,6 +1,7 @@
import os
from OverworldShuffle import __version__
OWR_VERSION = __version__
def write_appversion():

View File

@@ -1,4 +1,8 @@
import platform, sys, os, subprocess
import os
import platform
import subprocess
import sys
try:
import pkg_resources
except ModuleNotFoundError as e:
@@ -6,9 +10,11 @@ except ModuleNotFoundError as e:
import datetime
from Main import __version__
DR_VERSION = __version__
from OverworldShuffle import __version__
OWR_VERSION = __version__
PROJECT_NAME = "ALttP Overworld Randomizer"

View File

@@ -1,11 +1,18 @@
import RaceRandom as random
import collections
import logging
import time
from BaseClasses import CrystalBarrier, DoorType, Hook, RegionType, Sector
from BaseClasses import hook_from_door, flooded_keys
from Regions import location_events, flooded_keys_reverse
import RaceRandom as random
from BaseClasses import (
CrystalBarrier,
DoorType,
Hook,
RegionType,
Sector,
flooded_keys,
hook_from_door,
)
from Regions import flooded_keys_reverse, location_events
def pre_validate(builder, entrance_region_names, split_dungeon, world, player):

View File

@@ -1,5 +1,5 @@
from collections import defaultdict, deque
import typing
from collections import defaultdict, deque
import yaml
from yaml.representer import Representer
@@ -13,9 +13,9 @@ import RaceRandom as random
from BaseClasses import Location, LocationType, RegionType
from Items import ItemFactory
from PotShuffle import key_drop_special
from Utils import snes_to_pc, pc_to_snes, int16_as_bytes
from source.overworld.EntranceData import door_addresses
from Utils import int16_as_bytes, pc_to_snes, snes_to_pc
class EnemyStats:
def __init__(self, sprite, static, drop_flag=False, prize_pack: typing.Union[tuple, int] = 0,

View File

@@ -3,9 +3,8 @@ try:
except ImportError:
from enum import IntFlag as FastEnum
from RoomData import DoorKind, Position
from source.dungeon.RoomObject import RoomObject, DoorObject
from source.dungeon.RoomObject import DoorObject, RoomObject
class Room:

View File

@@ -1,10 +1,9 @@
import RaceRandom as random
from Utils import snes_to_pc
from source.dungeon.EnemyList import EnemySprite, SpriteType, Sprite
from source.dungeon.RoomList import boss_rooms, gt_boss_room, Room0006
from source.dungeon.EnemyList import EnemySprite, Sprite, SpriteType
from source.dungeon.RoomList import Room0006, boss_rooms, gt_boss_room
from source.dungeon.RoomObject import RoomObject
from source.enemizer.SpriteSheets import required_boss_sheets
from Utils import snes_to_pc
def get_dungeon_boss_room(dungeon_name, level):

View File

@@ -1,13 +1,17 @@
import RaceRandom as random
from collections import defaultdict
from Utils import snes_to_pc
from source.dungeon.EnemyList import SpriteType, EnemySprite, sprite_translation
import RaceRandom as random
from source.dungeon.EnemyList import EnemySprite, SpriteType, sprite_translation
from source.dungeon.RoomList import Room010C
from source.enemizer.SpecialEnemyModes import set_mimics, write_mimic_changes
from source.enemizer.SpriteSheets import sub_group_choices, sheets_with_free_gfx
from source.enemizer.SpriteSheets import randomize_underworld_sprite_sheets, randomize_overworld_sprite_sheets
from source.enemizer.SpriteSheets import (
randomize_overworld_sprite_sheets,
randomize_underworld_sprite_sheets,
sheets_with_free_gfx,
sub_group_choices,
)
from source.enemizer.TilePattern import tile_patterns
from Utils import snes_to_pc
shutter_sprites = {
0xb8: {0, 1, 2, 3, 4, 5}, 0xb: {4, 5, 6, 7, 8, 9}, 0x1b: {3, 4, 5}, 0x4b: {0, 3, 4}, 0x4: {9, 13, 14},

View File

@@ -1,12 +1,18 @@
from types import SimpleNamespace
from collections import Counter, defaultdict
from types import SimpleNamespace
from source.dungeon.EnemyList import enemy_names, SpriteType
from source.enemizer.Enemizer import randomize_underworld_rooms, randomize_overworld_enemies
from source.enemizer.SpriteSheets import randomize_underworld_sprite_sheets, randomize_overworld_sprite_sheets
from source.rom.DataTables import init_data_tables
from source.enemizer.DamageTables import DamageTable
import RaceRandom as random
from source.dungeon.EnemyList import SpriteType, enemy_names
from source.enemizer.DamageTables import DamageTable
from source.enemizer.Enemizer import (
randomize_overworld_enemies,
randomize_underworld_rooms,
)
from source.enemizer.SpriteSheets import (
randomize_overworld_sprite_sheets,
randomize_underworld_sprite_sheets,
)
from source.rom.DataTables import init_data_tables
def calculate_odds():

View File

@@ -2,9 +2,8 @@ import math
from collections import defaultdict
import RaceRandom as random
from source.logic.Rule import RuleFactory
from source.dungeon.EnemyList import EnemySprite
from source.logic.Rule import RuleFactory
# these are for drops only

View File

@@ -1,4 +1,5 @@
from source.dungeon.EnemyList import Sprite, EnemySprite
from source.dungeon.EnemyList import EnemySprite, Sprite
vanilla_sprites_ow = {}

View File

@@ -1,8 +1,12 @@
import RaceRandom as random
from source.dungeon.EnemyList import (
EnemySprite,
SpriteType,
enemy_names,
sprite_translation,
)
from Utils import snes_to_pc
from source.dungeon.EnemyList import EnemySprite, SpriteType, sprite_translation, enemy_names
change_idx_1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 35, 38, 65, 66, 67, 68, 70, 71, 76, 77, 78, 81, 83, 89, 91, 92, 94, 97, 100, 101, 102, 103, 104, 105, 106, 107]

View File

@@ -1,8 +1,14 @@
import logging
from collections import defaultdict
import RaceRandom as random
from source.dungeon.EnemyList import EnemySprite, SpriteType, enemy_names, sprite_translation, overlord_names
import RaceRandom as random
from source.dungeon.EnemyList import (
EnemySprite,
SpriteType,
enemy_names,
overlord_names,
sprite_translation,
)
from source.dungeon.RoomConstants import *

View File

@@ -1,6 +1,6 @@
import os
import json
import codecs
import json
import os
if __name__ == '__main__':
directory = './EnemizerCLI.Core/tiles'

View File

@@ -1,15 +1,31 @@
from tkinter import ttk, filedialog, messagebox, StringVar, Button, Entry, Frame, Label, E, W, LEFT, RIGHT, X, BOTTOM
from AdjusterMain import adjust, patch
from argparse import Namespace
from source.classes.SpriteSelector import SpriteSelector
from source.classes.ItemGfxSelector import ItemGfxSelector
import source.gui.widgets as widgets
import json
import logging
import os
from argparse import Namespace
from tkinter import (
BOTTOM,
LEFT,
RIGHT,
Button,
E,
Entry,
Frame,
Label,
StringVar,
W,
X,
filedialog,
messagebox,
ttk,
)
import source.gui.widgets as widgets
from AdjusterMain import adjust, patch
from source.classes.ItemGfxSelector import ItemGfxSelector
from source.classes.SpriteSelector import SpriteSelector
from Utils import output_path
def adjust_page(top, parent, settings):
# Adjust page
self = ttk.Frame(parent)

View File

@@ -1,17 +1,29 @@
from tkinter import ttk, messagebox, StringVar, Button, Entry, Frame, Label, LEFT, RIGHT, X
from argparse import Namespace
import logging
import os
import random
import re
from argparse import Namespace
from tkinter import (
LEFT,
RIGHT,
Button,
Entry,
Frame,
Label,
StringVar,
X,
messagebox,
ttk,
)
import source.classes.constants as CONST
import source.gui.widgets as widgets
from CLI import parse_cli
from Fill import FillError
from Main import main, export_yaml, EnemizerError
from Utils import local_path, output_path, open_file, update_deprecated_args
import source.classes.constants as CONST
from source.gui.randomize.multiworld import multiworld_page
import source.gui.widgets as widgets
from Main import EnemizerError, export_yaml, main
from source.classes.Empty import Empty
from source.gui.randomize.multiworld import multiworld_page
from Utils import local_path, open_file, output_path, update_deprecated_args
def bottom_frame(self, parent, args=None):

View File

@@ -1,9 +1,10 @@
from tkinter import ttk, Frame, N, E, W, LEFT, TOP, X, VERTICAL, Y
import source.gui.widgets as widgets
import json
import os
from tkinter import LEFT, TOP, VERTICAL, E, Frame, N, W, X, Y, ttk
import source.classes.constants as CONST
import source.gui.widgets as widgets
def custom_page(top,parent):
# Custom Item Pool

View File

@@ -1,10 +1,11 @@
from source.classes.SpriteSelector import SpriteSelector as spriteSelector
from source.gui.randomize.gameoptions import set_sprite
from Rom import Sprite, get_sprite_from_name
from Utils import update_deprecated_args
import source.classes.constants as CONST
from Rom import Sprite, get_sprite_from_name
from source.classes.BabelFish import BabelFish
from source.classes.Empty import Empty
from source.classes.SpriteSelector import SpriteSelector as spriteSelector
from source.gui.randomize.gameoptions import set_sprite
from Utils import update_deprecated_args
# Load args/settings for most tabs
def loadcliargs(gui, args, settings=None):

View File

@@ -1,7 +1,9 @@
from tkinter import ttk, Frame, Label, E, W, LEFT, RIGHT, TOP
import source.gui.widgets as widgets
import json
import os
from tkinter import LEFT, RIGHT, TOP, E, Frame, Label, W, ttk
import source.gui.widgets as widgets
def dungeon_page(parent):
# Dungeon Shuffle

View File

@@ -1,10 +1,27 @@
from tkinter import ttk, filedialog, StringVar, Button, Entry, Frame, Label, N, E, W, LEFT, RIGHT, BOTTOM, X
import source.gui.widgets as widgets
import json
import os
import webbrowser
from tkinter import (
BOTTOM,
LEFT,
RIGHT,
Button,
E,
Entry,
Frame,
Label,
N,
StringVar,
W,
X,
filedialog,
ttk,
)
import source.gui.widgets as widgets
from source.classes.Empty import Empty
def enemizer_page(parent,settings):
# Enemizer
self = ttk.Frame(parent)

View File

@@ -1,7 +1,9 @@
from tkinter import ttk, Frame, E, W, LEFT, RIGHT
import source.gui.widgets as widgets
import json
import os
from tkinter import LEFT, RIGHT, E, Frame, W, ttk
import source.gui.widgets as widgets
def entrando_page(parent):
# Entrance Randomizer

View File

@@ -1,10 +1,25 @@
from tkinter import ttk, StringVar, Button, Entry, Frame, Label, NE, NW, E, W, LEFT, RIGHT
from functools import partial
import source.classes.SpriteSelector as spriteSelector
import source.classes.ItemGfxSelector as itemGfxSelector
import source.gui.widgets as widgets
import json
import os
from functools import partial
from tkinter import (
LEFT,
NE,
NW,
RIGHT,
Button,
E,
Entry,
Frame,
Label,
StringVar,
W,
ttk,
)
import source.classes.ItemGfxSelector as itemGfxSelector
import source.classes.SpriteSelector as spriteSelector
import source.gui.widgets as widgets
def gameoptions_page(top, parent):
# Game Options

View File

@@ -1,11 +1,28 @@
from tkinter import ttk, filedialog, StringVar, Button, Entry, Frame, Label, E, W, LEFT, X, Text, Tk, INSERT
import source.classes.diags as diagnostics
import source.gui.widgets as widgets
import json
import os
from functools import partial
from source.classes.Empty import Empty
from tkinter import (
INSERT,
LEFT,
Button,
E,
Entry,
Frame,
Label,
StringVar,
Text,
Tk,
W,
X,
filedialog,
ttk,
)
import source.classes.diags as diagnostics
import source.gui.widgets as widgets
from Main import __version__
from source.classes.Empty import Empty
def generation_page(parent,settings):
# Generation Setup

View File

@@ -1,8 +1,24 @@
from tkinter import messagebox, ttk, font, Button, Frame, E, W, TOP, LEFT, RIGHT, X, Y, Label
import source.gui.widgets as widgets
from source.classes.Empty import Empty
import json
import os
from tkinter import (
LEFT,
RIGHT,
TOP,
Button,
E,
Frame,
Label,
W,
X,
Y,
font,
messagebox,
ttk,
)
import source.gui.widgets as widgets
from source.classes.Empty import Empty
def item_page(parent):
# Item Randomizer

View File

@@ -1,9 +1,11 @@
from tkinter import ttk, StringVar, Entry, Frame, Label, N, E, W, X, LEFT
import source.gui.widgets as widgets
import json
import os
from tkinter import LEFT, E, Entry, Frame, Label, N, StringVar, W, X, ttk
import source.gui.widgets as widgets
from source.classes.Empty import Empty
def multiworld_page(parent,settings):
# Multiworld
self = ttk.Frame(parent)

View File

@@ -1,7 +1,9 @@
from tkinter import ttk, Frame, Label, W, E, NW, LEFT, RIGHT, X, Y, TOP
import source.gui.widgets as widgets
import json
import os
from tkinter import LEFT, NW, RIGHT, TOP, E, Frame, Label, W, X, Y, ttk
import source.gui.widgets as widgets
def overworld_page(parent):
# Overworld Shuffle

View File

@@ -1,9 +1,10 @@
from tkinter import ttk, Frame, N, E, W, LEFT, TOP, X, VERTICAL, Y
import source.gui.widgets as widgets
import json
import os
from tkinter import LEFT, TOP, VERTICAL, E, Frame, N, W, X, Y, ttk
import source.classes.constants as CONST
import source.gui.widgets as widgets
def startinventory_page(top,parent):
# Starting Inventory

View File

@@ -1,7 +1,22 @@
from tkinter import messagebox, Checkbutton, Entry, Frame, IntVar, Label, OptionMenu, Spinbox, StringVar, LEFT, RIGHT, X
from tkinter import Button
from tkinter import (
LEFT,
RIGHT,
Button,
Checkbutton,
Entry,
Frame,
IntVar,
Label,
OptionMenu,
Spinbox,
StringVar,
X,
messagebox,
)
from source.classes.Empty import Empty
# Override Spinbox to include mousewheel support for changing value
class mySpinbox(Spinbox):
def __init__(self, *args, **kwargs):

View File

@@ -2,7 +2,8 @@ from collections import deque
from BaseClasses import CollectionState, RegionType
from Dungeons import dungeon_table
from OWEdges import OWTileRegions, OWTileDistricts
from OWEdges import OWTileDistricts, OWTileRegions
class District(object):

View File

@@ -1,13 +1,13 @@
import RaceRandom as random
import logging
from collections import defaultdict
from source.item.District import resolve_districts
from BaseClasses import PotItem, PotFlags, LocationType
import RaceRandom as random
from BaseClasses import LocationType, PotFlags, PotItem
from DoorShuffle import validate_vanilla_reservation
from Dungeons import dungeon_table
from Items import item_table, ItemFactory
from Items import ItemFactory, item_table
from PotShuffle import vanilla_pots
from source.item.District import resolve_districts
class ItemPoolConfig(object):

View File

@@ -1,6 +1,6 @@
import itertools
from collections import OrderedDict
try:
from fast_enum import FastEnum
except ImportError:

View File

@@ -2,11 +2,11 @@
Build Entrypoints
'''
import json
import platform
import os # for checking for dirs
import platform
import re
from json.decoder import JSONDecodeError
from subprocess import Popen, PIPE, STDOUT, CalledProcessError
from subprocess import PIPE, STDOUT, CalledProcessError, Popen
DEST_DIRECTORY = "."

View File

@@ -25,7 +25,7 @@ def check_requirements(console=False):
logger.error('https://github.com/aerinon/ALttPDoorRandomizer/blob/DoorDev/docs/BUILDING.md')
else:
import webbrowser
from tkinter import Tk, Label, Button, Frame
from tkinter import Button, Frame, Label, Tk
master = Tk()
master.title('Error')

View File

@@ -1,10 +1,9 @@
import RaceRandom as random
import logging
import copy
import logging
from collections import OrderedDict, defaultdict
from collections import defaultdict, OrderedDict
import RaceRandom as random
from BaseClasses import RegionType
from source.overworld.EntranceData import door_addresses
@@ -857,9 +856,9 @@ def get_nearby_entrances(avail, start_region):
def get_accessible_entrances(start_region, avail, assumed_inventory=[], cross_world=False, region_rules=True, exit_rules=True, include_one_ways=False, restrictive_follower=False):
from Main import copy_world_premature
from BaseClasses import CollectionState
from Items import ItemFactory
from Main import copy_world_premature
from OverworldShuffle import build_accessible_region_list, one_way_ledges
for p in range(1, avail.world.players + 1):

View File

@@ -1,13 +1,28 @@
from collections import defaultdict
from Utils import snes_to_pc, int24_as_bytes, int16_as_bytes, load_cached_yaml, pc_to_snes
from source.dungeon.EnemyList import EnemyTable, init_vanilla_sprites, vanilla_sprites, init_enemy_stats, EnemySprite
from source.dungeon.EnemyList import sprite_translation
from source.dungeon.EnemyList import (
EnemySprite,
EnemyTable,
init_enemy_stats,
init_vanilla_sprites,
sprite_translation,
vanilla_sprites,
)
from source.dungeon.RoomHeader import init_room_headers
from source.dungeon.RoomList import Room0127
from source.enemizer.OwEnemyList import init_vanilla_sprites_ow, vanilla_sprites_ow
from source.enemizer.SpriteSheets import init_sprite_sheets, init_sprite_requirements, SheetChoice
from source.enemizer.SpriteSheets import (
SheetChoice,
init_sprite_requirements,
init_sprite_sheets,
)
from Utils import (
int16_as_bytes,
int24_as_bytes,
load_cached_yaml,
pc_to_snes,
snes_to_pc,
)
def convert_area_id_to_offset(area_id):

View File

@@ -1,11 +1,10 @@
# Code derived from https://github.com/marcrobledo/RomPatcher.js (MIT License)
import sys
from binascii import crc32
from collections import defaultdict
from time import perf_counter
from collections import defaultdict
from binascii import crc32
try:
from fast_enum import FastEnum
except ImportError:

View File

@@ -1,12 +1,13 @@
import argparse
import RaceRandom as random
import os
import urllib.parse
import urllib.request
from pathlib import Path
import urllib.request
import urllib.parse
import yaml
import RaceRandom as random
def get_weights(path):
if os.path.exists(Path(path)):