Added the stz $047a for pod eg glitch
Standard generation improvements (Bomb escape rework) Vanilla+ER generation improvements
This commit is contained in:
@@ -150,7 +150,7 @@ def vanilla_key_logic(world, player):
|
||||
|
||||
origin_list = list(entrances_map[builder.name])
|
||||
find_enabled_origins(builder.sectors, enabled_entrances, origin_list, entrances_map, builder.name)
|
||||
if len(origin_list) <= 0:
|
||||
if len(origin_list) <= 0 or not pre_validate(builder, origin_list, world, player):
|
||||
if last_key == builder.name or loops > 1000:
|
||||
origin_name = world.get_region(origin_list[0], player).entrances[0].parent_region.name if len(origin_list) > 0 else 'no origin'
|
||||
raise Exception('Infinite loop detected for "%s" located at %s' % (builder.name, origin_name))
|
||||
@@ -373,7 +373,7 @@ def main_dungeon_generation(dungeon_builders, recombinant_builders, connections_
|
||||
last_key = builder.name
|
||||
loops += 1
|
||||
else:
|
||||
logging.getLogger('').info('%s: %s', world.fish.translate("cli","cli","generating.dungeon"), builder.name)
|
||||
logging.getLogger('').info('%s: %s', world.fish.translate("cli", "cli", "generating.dungeon"), builder.name)
|
||||
ds = generate_dungeon(builder, origin_list, split_dungeon, world, player)
|
||||
find_new_entrances(ds, entrances_map, connections, potentials, enabled_entrances, world, player)
|
||||
ds.name = name
|
||||
|
||||
@@ -1228,15 +1228,16 @@ def identify_destination_sectors(accessible_sectors, reverse_d_map, dungeon_map,
|
||||
if ent_name in split_list:
|
||||
split_section = split_name
|
||||
break
|
||||
for r_name in split_dungeon_entrances[d_name][split_section]:
|
||||
ent_sector = find_sector(r_name, dungeon_map[d_name].sectors)
|
||||
if ent_sector in accessible_sectors and ent_name not in dead_entrances:
|
||||
sector.destination_entrance = True
|
||||
found_connections.add(ent_name)
|
||||
accessible_sectors.add(sector)
|
||||
accessible_overworld.add(region)
|
||||
explored = False
|
||||
break
|
||||
if split_section:
|
||||
for r_name in split_dungeon_entrances[d_name][split_section]:
|
||||
ent_sector = find_sector(r_name, dungeon_map[d_name].sectors)
|
||||
if ent_sector in accessible_sectors and ent_name not in dead_entrances:
|
||||
sector.destination_entrance = True
|
||||
found_connections.add(ent_name)
|
||||
accessible_sectors.add(sector)
|
||||
accessible_overworld.add(region)
|
||||
explored = False
|
||||
break
|
||||
|
||||
|
||||
def calc_allowance_and_dead_ends(builder, connections_tuple):
|
||||
|
||||
@@ -287,9 +287,12 @@ def generate_itempool(world, player):
|
||||
if item in ['Progressive Bow', 'Bow'] and not found_bow:
|
||||
found_bow = True
|
||||
possible_weapons.append(item)
|
||||
if item in ['Hammer', 'Bombs (10)', 'Fire Rod', 'Cane of Somaria', 'Cane of Byrna']:
|
||||
if item in ['Hammer', 'Fire Rod', 'Cane of Somaria', 'Cane of Byrna']:
|
||||
if item not in possible_weapons:
|
||||
possible_weapons.append(item)
|
||||
if item in ['Bombs (10)']:
|
||||
if item not in possible_weapons and world.doorShuffle[player] != 'crossed':
|
||||
possible_weapons.append(item)
|
||||
starting_weapon = random.choice(possible_weapons)
|
||||
placed_items["Link's Uncle"] = starting_weapon
|
||||
pool.remove(starting_weapon)
|
||||
|
||||
2
Main.py
2
Main.py
@@ -24,7 +24,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute
|
||||
from ItemList import generate_itempool, difficulties, fill_prizes
|
||||
from Utils import output_path, parse_player_names
|
||||
|
||||
__version__ = '0.1.0.3-u'
|
||||
__version__ = '0.1.0.4-u'
|
||||
|
||||
class EnemizerError(RuntimeError):
|
||||
pass
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
# New Features
|
||||
|
||||
* Crossed Dungeon generation improvements
|
||||
* Standard mode generation improvements
|
||||
* Spoiler lists bosses (multiworld compatible)
|
||||
* Bombs escape not valid for Crossed Dungeon
|
||||
|
||||
### Experimental features
|
||||
|
||||
@@ -9,13 +12,13 @@
|
||||
|
||||
# Bug Fixes
|
||||
|
||||
* Crossed Dungeon generation improvements
|
||||
* Fix for Animated Tiles in crossed dungeon
|
||||
* Stonewall hardlock no longer reachable from certain drops (Sewer Drop, some Skull Woods drops) that were previously possible
|
||||
* No logic uses less key door logic
|
||||
* Spoiler log encoding
|
||||
* Enemizer settings made consistent with website
|
||||
* Swamp flooded ladders in the basement now requires Flippers
|
||||
* PoD EG Glitch gets killed on transitions (Only when DR is on)
|
||||
|
||||
##### In Progress
|
||||
|
||||
|
||||
2
Rom.py
2
Rom.py
@@ -22,7 +22,7 @@ from EntranceShuffle import door_addresses, exit_ids
|
||||
|
||||
|
||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||
RANDOMIZERBASEHASH = 'bd07845238de1ce060530a996378f867'
|
||||
RANDOMIZERBASEHASH = '4fdf20e033770cf92786a790a020d2d5'
|
||||
|
||||
|
||||
class JsonRom(object):
|
||||
|
||||
15
Rules.py
15
Rules.py
@@ -839,21 +839,28 @@ def standard_rules(world, player):
|
||||
copy_state.sweep_for_events()
|
||||
return copy_state.has('Zelda Delivered', player)
|
||||
|
||||
def bomb_escape_rule():
|
||||
loc = world.get_location("Link's Uncle", player)
|
||||
return loc.item and loc.item.name == 'Bombs (10)'
|
||||
|
||||
def standard_escape_rule(state):
|
||||
return state.can_kill_most_things(player) or bomb_escape_rule()
|
||||
|
||||
add_item_rule(world.get_location('Link\'s Uncle', player), uncle_item_rule)
|
||||
|
||||
# ensures the required weapon for escape lands on uncle (unless player has it pre-equipped)
|
||||
for location in ['Link\'s House', 'Sanctuary', 'Sewers - Secret Room - Left', 'Sewers - Secret Room - Middle',
|
||||
'Sewers - Secret Room - Right']:
|
||||
add_rule(world.get_location(location, player), lambda state: state.can_kill_most_things(player))
|
||||
add_rule(world.get_location('Secret Passage', player), lambda state: state.can_kill_most_things(player))
|
||||
add_rule(world.get_location(location, player), lambda state: standard_escape_rule(state))
|
||||
add_rule(world.get_location('Secret Passage', player), lambda state: standard_escape_rule(state))
|
||||
|
||||
escape_builder = world.dungeon_layouts[player]['Hyrule Castle']
|
||||
for region in escape_builder.master_sector.regions:
|
||||
for loc in region.locations:
|
||||
add_rule(loc, lambda state: state.can_kill_most_things(player))
|
||||
add_rule(loc, lambda state: standard_escape_rule(state))
|
||||
if region.name in std_kill_rooms:
|
||||
for ent in std_kill_rooms[region.name]:
|
||||
add_rule(world.get_entrance(ent, player), lambda state: state.can_kill_most_things(player))
|
||||
add_rule(world.get_entrance(ent, player), lambda state: standard_escape_rule(state))
|
||||
|
||||
set_rule(world.get_location('Zelda Pickup', player), lambda state: state.has('Big Key (Escape)', player))
|
||||
set_rule(world.get_entrance('Hyrule Castle Throne Room N', player), lambda state: state.has('Zelda Herself', player))
|
||||
|
||||
@@ -65,6 +65,7 @@ TrapDoorFixer:
|
||||
rts
|
||||
|
||||
Cleanup:
|
||||
stz $047a
|
||||
inc $11
|
||||
lda $ef
|
||||
rts
|
||||
|
||||
@@ -80,7 +80,7 @@ SpiralWarp: {
|
||||
tax : lda $02802e, x : tay
|
||||
jsl DecompDungAnimatedTiles
|
||||
+
|
||||
|
||||
stz $047a
|
||||
ply : plx : plb ; pull the stuff we pushed
|
||||
lda $a2 : and #$0f ; this is the code we are hijacking
|
||||
rtl
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user