Merge branch 'DoorDev' into DoorDevUnstable
# Conflicts: # Main.py # RELEASENOTES.md
This commit is contained in:
@@ -14,6 +14,7 @@ from RoomData import DoorKind, PairedDoor, reset_rooms
|
||||
from DungeonGenerator import ExplorationState, convert_regions, generate_dungeon, pre_validate, determine_required_paths, drop_entrances
|
||||
from DungeonGenerator import create_dungeon_builders, split_dungeon_builder, simple_dungeon_builder, default_dungeon_entrances
|
||||
from DungeonGenerator import dungeon_portals, dungeon_drops, GenerationException
|
||||
from DungeonGenerator import valid_region_to_explore as valid_region_to_explore_lim
|
||||
from KeyDoorShuffle import analyze_dungeon, build_key_layout, validate_key_layout, determine_prize_lock
|
||||
from Utils import ncr, kth_combination
|
||||
|
||||
@@ -1378,6 +1379,8 @@ def combine_layouts(recombinant_builders, dungeon_builders, entrances_map):
|
||||
dungeon_builders[recombine.name] = recombine
|
||||
|
||||
|
||||
# todo: this allows cross-dungeon exploring via HC Ledge or Inaccessible Regions
|
||||
# todo: @deprecated
|
||||
def valid_region_to_explore(region, world, player):
|
||||
return region and (region.type == RegionType.Dungeon
|
||||
or region.name in world.inaccessible_regions[player]
|
||||
@@ -1569,7 +1572,7 @@ okay_normals = [DoorKind.Normal, DoorKind.SmallKey, DoorKind.Bombable, DoorKind.
|
||||
|
||||
|
||||
def find_key_door_candidates(region, checked, world, player):
|
||||
dungeon = region.dungeon
|
||||
dungeon_name = region.dungeon.name
|
||||
candidates = []
|
||||
checked_doors = list(checked)
|
||||
queue = deque([(region, None, None)])
|
||||
@@ -1579,14 +1582,16 @@ def find_key_door_candidates(region, checked, world, player):
|
||||
d = ext.door
|
||||
if d and d.controller:
|
||||
d = d.controller
|
||||
if d and not d.blocked and not d.entranceFlag and d.dest is not last_door and d.dest is not last_region and d not in checked_doors:
|
||||
if d and not d.blocked and d.dest is not last_door and d.dest is not last_region and d not in checked_doors:
|
||||
valid = False
|
||||
if 0 <= d.doorListPos < 4 and d.type in [DoorType.Interior, DoorType.Normal, DoorType.SpiralStairs]:
|
||||
if (0 <= d.doorListPos < 4 and d.type in [DoorType.Interior, DoorType.Normal, DoorType.SpiralStairs]
|
||||
and not d.entranceFlag):
|
||||
room = world.get_room(d.roomIndex, player)
|
||||
position, kind = room.doorList[d.doorListPos]
|
||||
|
||||
if d.type == DoorType.Interior:
|
||||
valid = kind in [DoorKind.Normal, DoorKind.SmallKey, DoorKind.Bombable, DoorKind.Dashable]
|
||||
if valid and d.dest not in candidates: # interior doors are not separable yet
|
||||
candidates.append(d.dest)
|
||||
elif d.type == DoorType.SpiralStairs:
|
||||
valid = kind in [DoorKind.StairKey, DoorKind.StairKey2, DoorKind.StairKeyLow]
|
||||
elif d.type == DoorType.Normal:
|
||||
@@ -1605,7 +1610,7 @@ def find_key_door_candidates(region, checked, world, player):
|
||||
if valid and d not in candidates:
|
||||
candidates.append(d)
|
||||
connected = ext.connected_region
|
||||
if connected and (connected.type != RegionType.Dungeon or connected.dungeon == dungeon):
|
||||
if valid_region_to_explore_lim(connected, dungeon_name, world, player):
|
||||
queue.append((ext.connected_region, d, current))
|
||||
if d is not None:
|
||||
checked_doors.append(d)
|
||||
|
||||
90
README.md
90
README.md
@@ -38,9 +38,11 @@ Alternatively, run ```Gui.py``` for a simple graphical user interface.
|
||||
|
||||
# Commonly Missed Things and Differences from other Randomizers
|
||||
|
||||
Most of these apply only when the door shuffle is not vanilla.
|
||||
|
||||
### Starting Item
|
||||
|
||||
You start with a “Mirror Scroll”, a dumbed-down mirror that only works in dungeons, not the overworld and can’t erase blocks like the Mirror
|
||||
You start with a “Mirror Scroll”, a dumbed-down mirror that only works in dungeons, not the overworld and can’t erase blocks like the Mirror.
|
||||
|
||||
### Navigation
|
||||
|
||||
@@ -58,7 +60,7 @@ You start with a “Mirror Scroll”, a dumbed-down mirror that only works in du
|
||||
|
||||
### Boss Differences
|
||||
|
||||
* You have to find the attic floor and bomb it open and bring the maiden to the light to fight Blind. In cross dungeon door shuffle, the attic can be in any dungeon. If hints are on, there is a special one about a cracked floor.
|
||||
* You have to find the attic floor and bomb it open and bring the maiden to the light to fight Blind. In cross dungeon door shuffle, the attic can be in any dungeon. If you bring the maiden to the boss arena, she will hint were the cracked floor can be found. If hints are on, there is a special one about the cracked floor.
|
||||
* GT Bosses do not respawn after killing them in this mode.
|
||||
* Enemizer change: The attic/maiden sequence is now active and required when Blind is the boss of Theives' Town even when bosses are shuffled.
|
||||
|
||||
@@ -70,7 +72,7 @@ You start with a “Mirror Scroll”, a dumbed-down mirror that only works in du
|
||||
|
||||
### Misc
|
||||
|
||||
* Compass counts no longer function after you get the Triforce
|
||||
* Compass counts no longer function after you get the Triforce (this is actually true in all randomizers)
|
||||
|
||||
# Settings
|
||||
|
||||
@@ -124,7 +126,7 @@ The rooms are left alone and it is up to the discretion of the player whether to
|
||||
|
||||
#### Force
|
||||
|
||||
The two disjointed sections are forced to be in the same dungeon but the glitches are never logically required to complete that game.
|
||||
The two disjointed sections are forced to be in the same dungeon but the glitches are never logically required to complete that game.cause then you would need time to check the map in a d
|
||||
|
||||
### Standardize Palettes (--standardize_palettes)
|
||||
No effect if door shuffle is not on crossed
|
||||
@@ -239,6 +241,45 @@ Arrow Capacity upgrades are now replaced by Rupees wherever it might end up.
|
||||
|
||||
The Ten Arrows and 5 randomly selected Small Hearts or Blue Shields are replaced by the quiver item (represented by the Single Arrow in game.) 5 Red Potion refills are replaced by the Universal small key. It is assured that at least one shop sells Universal Small Keys. The quiver may thus not be found in shops. The quiver and small keys retain their original base price, but may be discounted.
|
||||
|
||||
## Logic Level
|
||||
|
||||
### Overworld Glitches
|
||||
|
||||
Set `--logic` to `owglitches` to make overworld glitches required in the logic.
|
||||
|
||||
## Shuffle Links House
|
||||
|
||||
In certain ER shuffles, (not dungeonssimple or dungeonsfulls), you can now control whether Links House is shuffled or remains vanilla. Previously, inverted seeds had this behavior and would shuffle links house, but now if will only do so if this is specified. Now, also works for open modes, but links house is never shuffled in standard mode.
|
||||
|
||||
## Bomb Logic (--bombbag)
|
||||
|
||||
When enabling this option, you do not start with bomb capacity but rather you must find 1 of 2 bomb bags. (They are represented by the +10 capacity item.) Bomb capacity upgrades are otherwise unavailable.
|
||||
|
||||
## Reduce Flashing
|
||||
|
||||
Accessibility option to reducing some flashing animations in the game.
|
||||
|
||||
## Pseudo-boots
|
||||
|
||||
Option to start with ability to dash, but not able to make any boots required logical checks or traversal.
|
||||
|
||||
## SFX Shuffle (--shuffle_sfx)
|
||||
|
||||
Shuffles a large portion of the sounds effects. Can be used with the adjuster.
|
||||
|
||||
## Experimental Features
|
||||
|
||||
The treasure check counter is turned on. Also, you will start as a bunny if your spawn point is in the dark world.
|
||||
|
||||
## Triforce Hunt Settings
|
||||
|
||||
A collection of settings to control the triforce piece pool.
|
||||
|
||||
* --triforce_goal_min: Minimum number of pieces to collect to win
|
||||
* --triforce_goal_max: Maximum number of pieces to collect to win
|
||||
* --triforce_pool_min: Minimum number of pieces in item pool
|
||||
* --triforce_pool_max: Maximum number of pieces in item pool
|
||||
* --triforce_min_difference: Minimum difference between pool and goal to win
|
||||
|
||||
## Seed
|
||||
|
||||
@@ -280,6 +321,30 @@ Include mobs and pots drop in the item pool. (default: not enabled)
|
||||
|
||||
Includes shop locations in the item pool.
|
||||
|
||||
```
|
||||
--pseudoboots
|
||||
```
|
||||
|
||||
Start with dash ability, but no way to use boots to accomplish checks
|
||||
|
||||
```
|
||||
--shufflelinks
|
||||
```
|
||||
|
||||
Whether to shuffle links house in most ER modes.
|
||||
|
||||
|
||||
```
|
||||
--bombbag
|
||||
```
|
||||
Need to find the bombbag upgrade to used bombs
|
||||
|
||||
```
|
||||
--experimental
|
||||
```
|
||||
|
||||
Enables experimental features
|
||||
|
||||
```
|
||||
--mixed_travel <mode>
|
||||
```
|
||||
@@ -290,4 +355,19 @@ How to handle certain glitches in crossed dungeon mode. (default: prevent)
|
||||
--standardize_palettes (mode)
|
||||
```
|
||||
|
||||
Whether to standardize dungeon palettes in crossed dungeon mode. (default: standardize)
|
||||
Whether to standardize dungeon palettes in crossed dungeon mode. (default: standardize)
|
||||
|
||||
```
|
||||
--reduce_flashing
|
||||
```
|
||||
|
||||
Reduces amount of flashing in some animations
|
||||
|
||||
```
|
||||
--shuffle_sfx
|
||||
```
|
||||
|
||||
Shuffles a bunch of the sounds effects
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -114,5 +114,12 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o
|
||||
|
||||
## Notes and Bug Fixes
|
||||
|
||||
|
||||
* 1.0.0.1
|
||||
* Add Light Hype Fairy to bombbag mode as needing bombs
|
||||
* Add Light Hype Fairy to bombbag mode as needing bombs
|
||||
|
||||
### From stable DoorDev
|
||||
|
||||
* 1.0.1
|
||||
* Fixed a bug with key doors not detecting one side of an interior door
|
||||
* Sprite selector fix for systems with SSL issues
|
||||
@@ -4,6 +4,7 @@ import json
|
||||
import os
|
||||
import random
|
||||
import shutil
|
||||
import ssl
|
||||
from urllib.parse import urlparse
|
||||
from urllib.request import urlopen
|
||||
import webbrowser
|
||||
@@ -149,7 +150,7 @@ class SpriteSelector(object):
|
||||
|
||||
try:
|
||||
task.update_status("Downloading official sprites list")
|
||||
with urlopen('https://alttpr.com/sprites') as response:
|
||||
with urlopen('https://alttpr.com/sprites', context=ssl._create_unverified_context()) as response:
|
||||
sprites_arr = json.loads(response.read().decode("utf-8"))
|
||||
except Exception as e:
|
||||
resultmessage = "Error getting list of official sprites. Sprites not updated.\n\n%s: %s" % (type(e).__name__, e)
|
||||
|
||||
Reference in New Issue
Block a user