Bug fix for attic blind
Bug fix for simple dungeon shuffles making HC your DW access with door shuffle on Bug fix for accessibility: none Moved bk/key info to keysanity screen Added chest total to keysanity screen
This commit is contained in:
@@ -1798,7 +1798,9 @@ class Spoiler(object):
|
|||||||
# locations: Change up location names; in the instance of a location with multiple sections, it'll try to translate the room name
|
# locations: Change up location names; in the instance of a location with multiple sections, it'll try to translate the room name
|
||||||
# items: Item names
|
# items: Item names
|
||||||
outfile.write('\n\nUnreachable Items:\n\n')
|
outfile.write('\n\nUnreachable Items:\n\n')
|
||||||
outfile.write('\n'.join(['%s: %s' % (self.world.fish.translate("meta","items",unreachable.item), self.world.fish.translate("meta","locations",unreachable)) for unreachable in self.unreachables]))
|
outfile.write('\n'.join(['%s: %s' % (self.world.fish.translate("meta", "items", unreachable.item.name),
|
||||||
|
self.world.fish.translate("meta", "locations", unreachable.name))
|
||||||
|
for unreachable in self.unreachables]))
|
||||||
|
|
||||||
# rooms: Change up room names; only if it's got no locations in it
|
# rooms: Change up room names; only if it's got no locations in it
|
||||||
# entrances: To/From overworld; Checking w/ & w/out "Exit" and translating accordingly
|
# entrances: To/From overworld; Checking w/ & w/out "Exit" and translating accordingly
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ def link_entrances(world, player):
|
|||||||
if world.mode[player] == 'standard':
|
if world.mode[player] == 'standard':
|
||||||
# must connect front of hyrule castle to do escape
|
# must connect front of hyrule castle to do escape
|
||||||
connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player)
|
connect_two_way(world, 'Hyrule Castle Entrance (South)', 'Hyrule Castle Exit (South)', player)
|
||||||
|
elif world.doorShuffle[player] != 'vanilla':
|
||||||
|
lw_entrances.append('Hyrule Castle Entrance (South)')
|
||||||
else:
|
else:
|
||||||
dungeon_exits.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
dungeon_exits.append(('Hyrule Castle Exit (South)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)'))
|
||||||
lw_entrances.append('Hyrule Castle Entrance (South)')
|
lw_entrances.append('Hyrule Castle Entrance (South)')
|
||||||
@@ -55,6 +57,11 @@ def link_entrances(world, player):
|
|||||||
if world.mode[player] == 'standard':
|
if world.mode[player] == 'standard':
|
||||||
# rest of hyrule castle must be in light world, so it has to be the one connected to east exit of desert
|
# rest of hyrule castle must be in light world, so it has to be the one connected to east exit of desert
|
||||||
connect_mandatory_exits(world, lw_entrances, [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], list(LW_Dungeon_Entrances_Must_Exit), player)
|
connect_mandatory_exits(world, lw_entrances, [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], list(LW_Dungeon_Entrances_Must_Exit), player)
|
||||||
|
elif world.doorShuffle[player] != 'vanilla':
|
||||||
|
# sanc is in light world, so must all of HC if door shuffle is on
|
||||||
|
connect_mandatory_exits(world, lw_entrances,
|
||||||
|
[('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)', 'Hyrule Castle Exit (South)')],
|
||||||
|
list(LW_Dungeon_Entrances_Must_Exit), player)
|
||||||
else:
|
else:
|
||||||
connect_mandatory_exits(world, lw_entrances, dungeon_exits, list(LW_Dungeon_Entrances_Must_Exit), player)
|
connect_mandatory_exits(world, lw_entrances, dungeon_exits, list(LW_Dungeon_Entrances_Must_Exit), player)
|
||||||
connect_mandatory_exits(world, dw_entrances, dungeon_exits, list(DW_Dungeon_Entrances_Must_Exit), player)
|
connect_mandatory_exits(world, dw_entrances, dungeon_exits, list(DW_Dungeon_Entrances_Must_Exit), player)
|
||||||
@@ -2047,6 +2054,14 @@ def simple_shuffle_dungeons(world, player):
|
|||||||
else:
|
else:
|
||||||
hc_target = multi_dungeons[2]
|
hc_target = multi_dungeons[2]
|
||||||
|
|
||||||
|
# door shuffle should restrict hyrule castle to the light world due to sanc being limited to the LW
|
||||||
|
if world.doorShuffle[player] != 'vanilla' and hc_target == 'Turtle Rock':
|
||||||
|
swap_w_dp = random.choice([True, False])
|
||||||
|
if swap_w_dp:
|
||||||
|
hc_target, dp_target = dp_target, hc_target
|
||||||
|
else:
|
||||||
|
hc_target, tr_target = tr_target, hc_target
|
||||||
|
|
||||||
# ToDo improve this?
|
# ToDo improve this?
|
||||||
|
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
|
|||||||
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 ItemList import generate_itempool, difficulties, fill_prizes
|
||||||
from Utils import output_path, parse_player_names
|
from Utils import output_path, parse_player_names
|
||||||
|
|
||||||
__version__ = '0.1.0.10-u'
|
__version__ = '0.1.0.11-u'
|
||||||
|
|
||||||
class EnemizerError(RuntimeError):
|
class EnemizerError(RuntimeError):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
### Experimental features
|
### Experimental features
|
||||||
|
|
||||||
|
* Moved BK information and total chest keys per dungeon to keysanity menu. The info there requires compass for all info.
|
||||||
|
* Map still required for on-hud key counter.
|
||||||
|
* Added total counter to keysanity the compass/map screen when you have the compass for the dungeon.
|
||||||
* Open "Edge" transitions can now be linked with normal doors
|
* Open "Edge" transitions can now be linked with normal doors
|
||||||
* "Straight" staircases (the ones similar to normal doors) can be linked with both normal doors and edges
|
* "Straight" staircases (the ones similar to normal doors) can be linked with both normal doors and edges
|
||||||
|
|
||||||
@@ -28,4 +31,8 @@
|
|||||||
* Swamp flooded ladders in the basement now requires Flippers
|
* Swamp flooded ladders in the basement now requires Flippers
|
||||||
* PoD EG Glitch gets killed on transitions (Only when DR is on)
|
* PoD EG Glitch gets killed on transitions (Only when DR is on)
|
||||||
* Problem with standard logic fixed wanting you to pass through the tapestry backwards to rescue Zelda
|
* Problem with standard logic fixed wanting you to pass through the tapestry backwards to rescue Zelda
|
||||||
* Fixed SRAM corruption issues (we believe)
|
* Fixed SRAM corruption issues
|
||||||
|
* Problem with the dungeons requiring you to take Blind through her attic fixed. (Maiden no longer despawns)
|
||||||
|
* Hyrule Castle will not be your DW access in various Entrance Shuffles: simple, restricted, dungeonssimple, dungeonsfull
|
||||||
|
(Also prevents getting stuck in TR opening)
|
||||||
|
* Beatable only (accessibility: none) no longer fails when there are unplaced items
|
||||||
4
Rom.py
4
Rom.py
@@ -22,7 +22,7 @@ from EntranceShuffle import door_addresses, exit_ids
|
|||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
RANDOMIZERBASEHASH = '2a64368fe169ff1e5099ef65f926417f'
|
RANDOMIZERBASEHASH = 'ad03900849f7220770bd8d00ed514dad'
|
||||||
|
|
||||||
|
|
||||||
class JsonRom(object):
|
class JsonRom(object):
|
||||||
@@ -608,6 +608,8 @@ def patch_rom(world, rom, player, team, enemized):
|
|||||||
rom.write_byte(0x13f01c+offset, layout.max_chests + layout.max_drops)
|
rom.write_byte(0x13f01c+offset, layout.max_chests + layout.max_drops)
|
||||||
rom.write_byte(0x13f02a+offset, layout.max_chests)
|
rom.write_byte(0x13f02a+offset, layout.max_chests)
|
||||||
builder = world.dungeon_layouts[player][name]
|
builder = world.dungeon_layouts[player][name]
|
||||||
|
rom.write_byte(0x13f070+offset, builder.location_cnt % 10)
|
||||||
|
rom.write_byte(0x13f07e+offset, builder.location_cnt // 10)
|
||||||
bk_status = 1 if builder.bk_required else 0
|
bk_status = 1 if builder.bk_required else 0
|
||||||
bk_status = 2 if builder.bk_provided else bk_status
|
bk_status = 2 if builder.bk_provided else bk_status
|
||||||
rom.write_byte(0x13f038+offset*2, bk_status)
|
rom.write_byte(0x13f038+offset*2, bk_status)
|
||||||
|
|||||||
@@ -561,10 +561,14 @@ BigKeyStatus: ;27f038 (status 2 indicate BnC guard)
|
|||||||
dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001
|
dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001
|
||||||
DungeonReminderTable: ;27f054
|
DungeonReminderTable: ;27f054
|
||||||
dw $2D50, $2D50, $2D51, $2D52, $2D54, $2D56, $2D55, $2D5A, $2D57, $2D59, $2D53, $2D58, $2D5B, $2D5C
|
dw $2D50, $2D50, $2D51, $2D52, $2D54, $2D56, $2D55, $2D5A, $2D57, $2D59, $2D53, $2D58, $2D5B, $2D5C
|
||||||
;27f070
|
TotalLocationsLow: ;27f070
|
||||||
|
db $08, $08, $06, $06, $02, $00, $04, $08, $08, $08, $06, $08, $02, $07
|
||||||
|
TotalLocationsHigh: ;27f07e
|
||||||
|
db $00, $00, $00, $00, $00, $01, $01, $00, $00, $00, $00, $00, $01, $02
|
||||||
|
;27F08C
|
||||||
|
|
||||||
; Vert 0,6,0 Horz 2,0,8
|
; Vert 0,6,0 Horz 2,0,8
|
||||||
org $27f080
|
org $27f090
|
||||||
CoordIndex: ; Horizontal 1st
|
CoordIndex: ; Horizontal 1st
|
||||||
db 2, 0 ; Coordinate Index $20-$23
|
db 2, 0 ; Coordinate Index $20-$23
|
||||||
OppCoordIndex:
|
OppCoordIndex:
|
||||||
@@ -584,7 +588,7 @@ dw $007f, $0077 ; Left/Top camera bounds when at edge or layout frozen
|
|||||||
dw $0007, $000b ; Left/Top camera bounds when not frozen + appropriate low byte $22/$20 (preadj. by #$78/#$6c)
|
dw $0007, $000b ; Left/Top camera bounds when not frozen + appropriate low byte $22/$20 (preadj. by #$78/#$6c)
|
||||||
dw $00ff, $010b ; Right/Bot camera bounds when not frozen + appropriate low byte $20/$22
|
dw $00ff, $010b ; Right/Bot camera bounds when not frozen + appropriate low byte $20/$22
|
||||||
dw $017f, $0187 ; Right/Bot camera bound when at edge or layout frozen
|
dw $017f, $0187 ; Right/Bot camera bound when at edge or layout frozen
|
||||||
;27f09e next free byte
|
;27f0ae next free byte
|
||||||
|
|
||||||
org $27f100
|
org $27f100
|
||||||
TilesetTable:
|
TilesetTable:
|
||||||
|
|||||||
@@ -120,10 +120,15 @@ jsl GuruguruFix : bra .next
|
|||||||
nop #3
|
nop #3
|
||||||
.next
|
.next
|
||||||
|
|
||||||
|
org $028fc9
|
||||||
|
nop #2 : jsl BlindAtticFix
|
||||||
|
|
||||||
; also rando's hooks.asm line 1360
|
; also rando's hooks.asm line 1360
|
||||||
; 106e4e -> goes to a0ee4e
|
; 106e4e -> goes to a0ee4e
|
||||||
org $a0ee84 ; <- 6FC4C - headsup_display.asm : 836 (LDA $7EF36E : AND.w #$00FF : ADD.w #$0007 : AND.w #$FFF8 : TAX)
|
org $a0ee84 ; <- 6FC4C - headsup_display.asm : 836 (LDA $7EF36E : AND.w #$00FF : ADD.w #$0007 : AND.w #$FFF8 : TAX)
|
||||||
jsl DrHudOverride
|
jsl DrHudOverride
|
||||||
|
org $0ded04 ; <- rando's hooks.asm line 2192 - 6ED04 - equipment.asm : 1963 (REP #$30)
|
||||||
|
jsl DrHudDungeonItemsAdditions
|
||||||
org $098638 ; rando's hooks.asm line 2192
|
org $098638 ; rando's hooks.asm line 2192
|
||||||
jsl CountChestKeys
|
jsl CountChestKeys
|
||||||
org $06D192 ; rando's hooks.asm line 457
|
org $06D192 ; rando's hooks.asm line 457
|
||||||
|
|||||||
@@ -36,35 +36,92 @@ HudAdditions:
|
|||||||
+ lda.w DRFlags : and #$0004 : beq .restore
|
+ lda.w DRFlags : and #$0004 : beq .restore
|
||||||
lda $7ef368 : and.l $0098c0, x : beq .restore
|
lda $7ef368 : and.l $0098c0, x : beq .restore
|
||||||
|
|
||||||
lda #$2811 : sta $7ec740
|
; lda #$2811 : sta $7ec740
|
||||||
lda $7ef366 : and.l $0098c0, x : bne .check
|
; lda $7ef366 : and.l $0098c0, x : bne .check
|
||||||
lda.w BigKeyStatus, x : bne + ; change this, if bk status changes to one byte
|
; lda.w BigKeyStatus, x : bne + ; change this, if bk status changes to one byte
|
||||||
lda #$2574 : bra ++
|
; lda #$2574 : bra ++
|
||||||
+ cmp #$0002 : bne +
|
; + cmp #$0002 : bne +
|
||||||
lda #$2420 : bra ++
|
; lda #$2420 : bra ++
|
||||||
+ lda #$207f : bra ++
|
; + lda #$207f : bra ++
|
||||||
.check lda #$2826
|
; .check lda #$2826
|
||||||
++ sta $7ec742
|
; ++ sta $7ec742
|
||||||
txa : lsr : tax
|
txa : lsr : tax
|
||||||
|
|
||||||
lda $7ef4e0, x : jsr ConvertToDisplay : sta $7ec7a2
|
lda $7ef4e0, x : jsr ConvertToDisplay : sta $7ec7a2
|
||||||
lda #$2830 : sta $7ec7a4
|
lda #$2830 : sta $7ec7a4
|
||||||
lda.w ChestKeys, x : jsr ConvertToDisplay : sta $7ec7a6
|
lda.w ChestKeys, x : jsr ConvertToDisplay : sta $7ec7a6
|
||||||
|
|
||||||
lda #$2871 : sta $7ec780
|
; lda #$2871 : sta $7ec780
|
||||||
lda.w TotalKeys, x
|
; lda.w TotalKeys, x
|
||||||
sep #$20 : !sub $7ef4b0, x : rep #$20
|
; sep #$20 : !sub $7ef4b0, x : rep #$20 ; todo 4b0 no longer in use
|
||||||
jsr ConvertToDisplay : sta $7ec782
|
; jsr ConvertToDisplay : sta $7ec782
|
||||||
|
|
||||||
.restore
|
.restore
|
||||||
plb : rts
|
plb : rts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HudOffsets:
|
||||||
|
; none hc east desert aga swamp pod mire skull ice hera tt tr gt
|
||||||
|
dw $fffe, $0000, $0006, $0008, $0002, $0010, $000e, $0018, $0012, $0016, $000a, $0014, $001a, $001e
|
||||||
|
|
||||||
|
DrHudDungeonItemsAdditions:
|
||||||
|
{
|
||||||
|
jsl DrawHUDDungeonItems
|
||||||
|
lda.l HUDDungeonItems : and #$ff : bne + : rtl : +
|
||||||
|
lda.l DRMode : cmp #$02 : beq + : rtl : +
|
||||||
|
|
||||||
|
phx : phy : php
|
||||||
|
rep #$30
|
||||||
|
|
||||||
|
lda !HUD_FLAG : and.w #$0020 : beq + : bra ++ : +
|
||||||
|
lda HUDDungeonItems : and.w #$0003 : bne + : bra ++ : +
|
||||||
|
lda.w #$2810 : sta $1684 ; small keys icon
|
||||||
|
lda.w #$2811 : sta $16c4 ; big key icon
|
||||||
|
lda.w #$2810 : sta $1704 ; small keys icon
|
||||||
|
ldx #$0002
|
||||||
|
- lda $7ef364 : and.l $0098c0, x : beq + ; must have compass
|
||||||
|
lda.l HudOffsets, x : tay
|
||||||
|
jsr BkStatus : sta $16C6, y ; big key status
|
||||||
|
lda.l ChestKeys, x : jsr ConvertToDisplay2 : sta $1706, y ; small key totals
|
||||||
|
+ inx #2 : cpx #$001b : bcc -
|
||||||
|
++
|
||||||
|
lda !HUD_FLAG : and.w #$0020 : bne + : bra ++ : +
|
||||||
|
lda HUDDungeonItems : and.w #$000c : bne + : bra ++ : +
|
||||||
|
lda.w #$24f5 : sta $1704 ; blank
|
||||||
|
ldx #$0002
|
||||||
|
- lda $7ef364 : and.l $0098c0, x : beq + ; must have compass
|
||||||
|
lda.l HudOffsets, x : tay
|
||||||
|
phx ; total chest counts
|
||||||
|
txa : lsr : tax
|
||||||
|
lda.l TotalLocationsLow, x : jsr ConvertToDisplay2 : sta $1706, y
|
||||||
|
lda.l TotalLocationsHigh, x : jsr ConvertToDisplay2 : sta $16c6, y
|
||||||
|
plx
|
||||||
|
+
|
||||||
|
+ inx #2 : cpx #$001b : bcc -
|
||||||
|
++
|
||||||
|
plp : ply : plx : rtl
|
||||||
|
}
|
||||||
|
|
||||||
|
BkStatus:
|
||||||
|
lda $7ef366 : and.l $0098c0, x : bne +++ ; has the bk already
|
||||||
|
lda.l BigKeyStatus, x : bne ++
|
||||||
|
lda #$2574 : rts ; X for no BK
|
||||||
|
++ cmp #$0002 : bne +
|
||||||
|
lda #$2420 : rts ; symbol for BnC
|
||||||
|
+ lda #$24f5 : rts ; black otherwise
|
||||||
|
+++ lda #$2826 : rts ; check mark
|
||||||
|
|
||||||
ConvertToDisplay:
|
ConvertToDisplay:
|
||||||
and #$00ff : cmp #$000a : !blt +
|
and.w #$00ff : cmp #$000a : !blt +
|
||||||
!add #$2553 : rts
|
!add #$2553 : rts
|
||||||
+ !add #$2490 : rts
|
+ !add #$2490 : rts
|
||||||
|
|
||||||
|
ConvertToDisplay2:
|
||||||
|
and.w #$00ff : beq ++
|
||||||
|
cmp #$000a : !blt +
|
||||||
|
!add #$2553 : rts
|
||||||
|
+ !add #$2816 : rts
|
||||||
|
++ lda #$3020 : rts
|
||||||
|
|
||||||
CountChestKeys:
|
CountChestKeys:
|
||||||
jsl ItemDowngradeFix
|
jsl ItemDowngradeFix
|
||||||
|
|||||||
@@ -73,4 +73,10 @@ GuruguruFix:
|
|||||||
lda $a0 : cmp #$df : !bge +
|
lda $a0 : cmp #$df : !bge +
|
||||||
and #$0f : cmp #$0e : !blt +
|
and #$0f : cmp #$0e : !blt +
|
||||||
iny #2
|
iny #2
|
||||||
+ rtl
|
+ rtl
|
||||||
|
|
||||||
|
BlindAtticFix:
|
||||||
|
lda.l DRMode : beq +
|
||||||
|
lda #$01 : rtl
|
||||||
|
+ lda $7EF3CC : cmp.b #$06
|
||||||
|
rtl
|
||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user