Bug fix for vanilla BK at Ball n Chain guard

Bug fix for camera unlock
Bug fix for bad pseudo layer at PoD Map Balcony
Minor fix for non-retro key hud info
This commit is contained in:
aerinon
2020-10-26 11:46:52 -06:00
parent a1782e3edc
commit 8c73947ad7
8 changed files with 52 additions and 20 deletions

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 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.2.0.2-u' __version__ = '0.2.0.3-u'
class EnemizerError(RuntimeError): class EnemizerError(RuntimeError):
pass pass

View File

@@ -1,12 +1,22 @@
# New Features # New Features
* Lobby shuffle added as Intensity level 3 * Lobby shuffle added as Intensity level 3
* Can now be found in the spoiler
* Known issues:
* Palettes aren't perfect - may add Sanctuary and Sewer palette back. May add a way to turn off palette "fixing"
* Certain hints in ER due to lobby changes
* Animated tiles aren't loaded correctly in lobbies
* If a wallmaster grabs you and the lobby is dark, the lamp doesn't turn on
* --keydropshuffle added (coming to the GUI soon). This add 33 new locations to the game where keys are found under pots
and where enemies drop keys. This includes 32 small key location and the ball and chain guard who normally drop the HC
Big Key.
* Multiworld untested - May need changes to MultiClient/MultiServer to recognize new locations
### Experimental features ### Experimental features
* Redesign of Keysanity Menu for Crossed Dungeon * Redesign of Keysanity Menu for Crossed Dungeon - soon to move out of experimental
#### Temporary debug features: #### Temporary debug features
* Removed the red square in the upper right corner of the hud if the castle gate is closed * Removed the red square in the upper right corner of the hud if the castle gate is closed
@@ -14,3 +24,13 @@
* Fixed a situation where logic did not account properly for Big Key doors in standard Hyrule Castle * Fixed a situation where logic did not account properly for Big Key doors in standard Hyrule Castle
* Fixed a problem ER shuffle generation that did not account for lobbies moving around * Fixed a problem ER shuffle generation that did not account for lobbies moving around
* Fixed a problem with camera unlock (GT Mimics and Mire Minibridge)
* Fixed a problem with bad-pseudo layer at PoD map Balcony (unable to hit switch with Bomb)
# Known Issues
(I'm planning to fix theese in this Unstable iteration hopefully)
* Hammerjump (et al) rails
* Backward TR Crystal Maze locking Somaria
* Ganon hint when hints are turned off not correct

10
Rom.py
View File

@@ -22,7 +22,7 @@ from EntranceShuffle import door_addresses, exit_ids
JAP10HASH = '03a63945398191337e896e5771f77173' JAP10HASH = '03a63945398191337e896e5771f77173'
RANDOMIZERBASEHASH = '890bac9433ffda07aeeb858cfdb41e4a' RANDOMIZERBASEHASH = '796d527e1a2ebbcac4023f6b8b9444bf'
class JsonRom(object): class JsonRom(object):
@@ -1328,7 +1328,13 @@ def patch_rom(world, rom, player, team, enemized):
# set correct flag for hera basement item # set correct flag for hera basement item
hera_basement = world.get_location('Tower of Hera - Basement Cage', player) hera_basement = world.get_location('Tower of Hera - Basement Cage', player)
if hera_basement.item is not None and hera_basement.item.name == 'Small Key (Tower of Hera)' and hera_basement.item.player == player: is_small_key_this_dungeon = False
if hera_basement.item is not None and hera_basement.item.smallkey:
item_dungeon = hera_basement.item.name.split('(')[1][:-1]
if item_dungeon == 'Escape':
item_dungeon = 'Hyrule Castle'
is_small_key_this_dungeon = hera_basement.dungeon.name == item_dungeon
if is_small_key_this_dungeon:
rom.write_byte(0x4E3BB, 0xE4) rom.write_byte(0x4E3BB, 0xE4)
else: else:
rom.write_byte(0x4E3BB, 0xEB) rom.write_byte(0x4E3BB, 0xEB)

View File

@@ -32,7 +32,7 @@ HudAdditions:
lda $7ef368 : and.l $0098c0, x : beq .restore lda $7ef368 : and.l $0098c0, x : beq .restore
txa : lsr : tax txa : lsr : tax
lda.l GenericKeys : bne + lda.l GenericKeys : and #$00ff : bne +
lda $7ef4e0, x : jsr ConvertToDisplay : sta $7ec7a2 lda $7ef4e0, x : jsr ConvertToDisplay : sta $7ec7a2
lda #$2830 : sta $7ec7a4 lda #$2830 : sta $7ec7a4
+ +

View File

@@ -5,7 +5,7 @@ org $06d049 ; <- 35049 sprite_absorbable : 31-32 (JSL Sprite_DrawRippleIfInWater
jsl SpriteKeyDrawGFX : bra + : nop : + jsl SpriteKeyDrawGFX : bra + : nop : +
org $06d180 org $06d180
jsl BigKeyGet : bcs $07 jsl BigKeyGet : bcs $07 : nop #5
org $06d18d ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA $7EF36F) org $06d18d ; <- 3518D - sprite_absorbable.asm : 274 (LDA $7EF36F : INC A : STA $7EF36F)
jsl KeyGet jsl KeyGet
@@ -80,8 +80,9 @@ SpriteKeyPrep:
inx : lda.l LootTable, x : sta !MULTIWORLD_SPRITEITEM_PLAYER_ID inx : lda.l LootTable, x : sta !MULTIWORLD_SPRITEITEM_PLAYER_ID
inx : lda.l LootTable, x inx : lda.l LootTable, x
plx : sta $0e80, x plx : sta $0e80, x
cmp #$24 : beq + cmp #$24 : bne +++
jsl PrepDynamicTile : bra + lda $a0 : cmp #$80 : bne + : lda #$24
+++ jsl PrepDynamicTile : bra +
++ plx : lda #$24 : sta $0e80, x ++ plx : lda #$24 : sta $0e80, x
+ pla + pla
rtl rtl
@@ -99,8 +100,9 @@ SpriteKeyDrawGFX:
.jslrtsreturn .jslrtsreturn
rtl rtl
+ lda $0e80, x + lda $0e80, x
cmp #$24 : beq - cmp #$24 : bne +
jsl DrawDynamicTile ; see DrawHeartPieceGFX if problems lda $a0 : cmp #$80 : bne - : lda #$24
+ jsl DrawDynamicTile ; see DrawHeartPieceGFX if problems
cmp #$03 : bne + cmp #$03 : bne +
pha : lda $0e60, x : ora.b #$20 : sta $0E60, x : pla pha : lda $0e60, x : ora.b #$20 : sta $0E60, x : pla
+ +
@@ -138,7 +140,8 @@ KeyGet:
BigKeyGet: BigKeyGet:
{ {
lda.l ShuffleKeyDrops : bne + lda.l ShuffleKeyDrops : bne +
- stz $02e9 : ldy.b #$32 : phx ; what we wrote over - stz $02e9 : ldy.b #$32 ; what we wrote over
phx : jsl Link_ReceiveItem : plx ; what we wrote over
clc : rtl clc : rtl
+ +
ldy $0e80, x ldy $0e80, x

View File

@@ -190,8 +190,9 @@ PrepScrollToEdge:
+ sta $05 + sta $05
lda $01 : and #$10 : beq + lda $01 : and #$10 : beq +
lda #01 lda #01
+ sta $ee + sta $ee : bne +
rts stz $0476
+ rts
} }
; Normal Flags should be in $01 ; Normal Flags should be in $01
@@ -199,7 +200,9 @@ PrepScrollToEdge:
PrepScrollToNormal: PrepScrollToNormal:
{ {
lda $01 : sta $fe : and #$04 : lsr #2 : sta $ee ; trap door and layer lda $01 : sta $fe : and #$04 : lsr #2 : sta $ee ; trap door and layer
stz $05 : lda #$78 : sta $04 bne +
stz $0476
+ stz $05 : lda #$78 : sta $04
lda $01 : and #$03 : beq .end lda $01 : and #$03 : beq .end
cmp #$02 : !bge + cmp #$02 : !bge +
lda #$f8 : sta $04 : bra .end lda #$f8 : sta $04 : bra .end

View File

@@ -188,9 +188,9 @@ CheckRoomLayoutX:
jsr LoadRoomLayout ;switches to 8-bit jsr LoadRoomLayout ;switches to 8-bit
cmp #$04 : !blt .lock cmp #$04 : !blt .lock
cmp #$05 : bne + cmp #$05 : bne +
lda $06 : cmp #$ff : beq .lock lda $04 : cmp #$f8 : beq .lock
+ cmp #$06 : bne .free + cmp #$06 : bne .free
lda $06 : cmp #$ff : bne .lock lda $04 : cmp #$f8 : bne .lock
.free rep #$30 : clc : rts .free rep #$30 : clc : rts
.lock rep #$30 : sec : rts .lock rep #$30 : sec : rts

File diff suppressed because one or more lines are too long