Adjusted map info to be experimental

Moved mirror scroll to be standard in non-vanilla door shuffles
Fixed potential duplicate map issues
This commit is contained in:
aerinon
2020-04-08 15:56:03 -06:00
parent 114ed784f1
commit 4fe97f9b7f
5 changed files with 16 additions and 18 deletions

View File

@@ -715,14 +715,6 @@ def cross_dungeon(world, player):
all_dungeon_items = [y for x in world.dungeons if x.player == player for y in x.all_items]
target_items = 34 if world.retro[player] else 63
d_items = target_items - len(all_dungeon_items)
if d_items > 0:
if d_items >= 1: # restore HC map
world.get_dungeon('Hyrule Castle', player).dungeon_items.append(ItemFactory('Map (Escape)', player))
if d_items >= 2: # restore GT map
world.get_dungeon('Ganons Tower', player).dungeon_items.append(ItemFactory('Map (Ganons Tower)', player))
if d_items > 2:
world.pool_adjustment[player] = d_items - 2
elif d_items < 0:
world.pool_adjustment[player] = d_items
smooth_door_pairs(world, player)
@@ -1300,7 +1292,7 @@ def stateful_door(door, kind):
def random_door_type(door, partner, world, player, type_a, type_b, room_a, room_b):
r_kind = random.choices([DoorKind.Normal, DoorKind.Bombable, DoorKind.Dashable], [5, 2, 3], k=1)[0]
r_kind = random.choices([DoorKind.Normal, DoorKind.Bombable, DoorKind.Dashable], [15, 4, 6], k=1)[0]
if r_kind != DoorKind.Normal:
if door.type == DoorType.Normal:
add_pair(door, partner, world, player)
@@ -1492,6 +1484,7 @@ class DROptions(Flag):
NoOptions = 0x00
Eternal_Mini_Bosses = 0x01 # If on, GT minibosses marked as defeated when they try to spawn a heart
Town_Portal = 0x02 # If on, Players will start with mirror scroll
Map_Info = 0x04
Open_Desert_Wall = 0x80 # If on, pre opens the desert wall, no fire required
# DATA GOES DOWN HERE

View File

@@ -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.0.20.3u'
__version__ = '0.0.20.4u'
class EnemizerError(RuntimeError):

8
Rom.py
View File

@@ -22,7 +22,7 @@ from EntranceShuffle import door_addresses, exit_ids
JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '9106102ce69cf290fe2f4fce1e95a89b'
RANDOMIZERBASEHASH = 'da4e48a9692a3f7c488dfb3dcaa58f42'
class JsonRom(object):
@@ -592,8 +592,12 @@ def patch_rom(world, rom, player, team, enemized):
if world.mode[player] == 'inverted':
patch_shuffled_dark_sanc(world, rom, player)
# setup dr option flags based on experimental, etc.
dr_flags = DROptions.Eternal_Mini_Bosses if world.doorShuffle[player] == 'vanilla' else DROptions.Town_Portal
if world.experimental[player]:
dr_flags |= DROptions.Map_Info
# patch doors
dr_flags = DROptions.Eternal_Mini_Bosses if world.doorShuffle[player] == 'vanilla' or not world.experimental[player] else DROptions.Town_Portal
if world.doorShuffle[player] == 'crossed':
rom.write_byte(0x139004, 2)
for name, layout in world.key_layout[player].items():

View File

@@ -16,8 +16,11 @@ HudAdditions:
lda #$345e : sta $7ec790 : bra .next
+ lda #$207f : sta $7ec790
.next lda DRMode : and #$0002 : bne + : plb : rts : +
lda $7ef36d : and #$00ff : beq +
lda DungeonReminderTable, x : sta $7ec702
+ lda DRFlags : and #$0040 : beq .restore
lda $7ef368 : and.l $0098c0, x : beq .restore
lda #$2811 : sta $7ec740
lda $7ef366 : and.l $0098c0, x : bne .check
lda BigKeyStatus, x : and #$00ff : bne + ;todo: "and" is redundant or change table to one byte
@@ -27,7 +30,7 @@ HudAdditions:
+ lda #$207f : bra ++
.check lda #$2826
++ sta $7ec742
+ txa : lsr : tax
txa : lsr : tax
lda $7ef4e0, x : jsr ConvertToDisplay : sta $7ec7a2
lda #$2830 : sta $7ec7a4
@@ -47,8 +50,6 @@ ConvertToDisplay:
!add #$2553 : rts
+ !add #$2490 : rts
; and $18c0, x
;207f is blank
CountChestKeys:
jsl ItemDowngradeFix

File diff suppressed because one or more lines are too long