diff --git a/DoorShuffle.py b/DoorShuffle.py index 17f90aec..df97441f 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1887,7 +1887,7 @@ def smooth_door_pairs(world, player): if type_b == DoorKind.SmallKey: remove_pair(door, world, player) else: - if valid_pair: + if valid_pair and not std_forbidden(door, world, player): bd_candidates[door.entrance.parent_region.dungeon].append(door) elif type_a in [DoorKind.Bombable, DoorKind.Dashable] or type_b in [DoorKind.Bombable, DoorKind.Dashable]: if type_a in [DoorKind.Bombable, DoorKind.Dashable]: @@ -1896,7 +1896,8 @@ def smooth_door_pairs(world, player): else: room_b.change(partner.doorListPos, DoorKind.Normal) remove_pair(partner, world, player) - elif valid_pair and type_a != DoorKind.SmallKey and type_b != DoorKind.SmallKey: + elif (valid_pair and type_a != DoorKind.SmallKey and type_b != DoorKind.SmallKey + and not std_forbidden(door, world, player)): bd_candidates[door.entrance.parent_region.dungeon].append(door) shuffle_bombable_dashable(bd_candidates, world, player) world.paired_doors[player] = [x for x in world.paired_doors[player] if x.pair or x.original] @@ -1935,6 +1936,11 @@ def stateful_door(door, kind): return False +def std_forbidden(door, world, player): + return (world.mode[player] == 'standard' and door.entrance.parent_region.dungeon.name == 'Hyrule Castle' and + 'Hyrule Castle Throne Room N' in [door.name, door.dest.name]) + + def custom_door_kind(custom_key, kind, bd_candidates, counts, world, player): if custom_key in world.custom_door_types[player]: for door_a, door_b in world.custom_door_types[player][custom_key]: diff --git a/Mystery.py b/Mystery.py index 3a33dad2..593e9516 100644 --- a/Mystery.py +++ b/Mystery.py @@ -141,7 +141,7 @@ def roll_settings(weights): ret.algorithm = get_choice('algorithm') glitch_map = {'none': 'noglitches', 'no_logic': 'nologic', 'owglitches': 'owglitches', - 'minorglitches': 'minorglitches'} + 'owg': 'owglitches', 'minorglitches': 'minorglitches'} glitches_required = get_choice('glitches_required') if glitches_required is not None: if glitches_required not in glitch_map.keys(): diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 55d8e09b..206232df 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -168,6 +168,7 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o * Logic refinements * Skull X Room requires Boots or access to Skull Back Drop * GT Falling Torches requires Boots to get over the falling tile gap (this is a stop-gap measure until more sophisticated crystal switch traversal is possible) + * Fixed a couple rain state issues * 1.0.1.11 * Separated Collection Rate counter from experimental * Added MSU Resume option diff --git a/Rom.py b/Rom.py index d1424d52..2cf72cfb 100644 --- a/Rom.py +++ b/Rom.py @@ -35,7 +35,7 @@ from source.item.FillUtil import valid_pot_items JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '1e45d174c71b2e079df1c8d5e8d1451b' +RANDOMIZERBASEHASH = '8d196e8024faebbbbe1304032158ccea' class JsonRom(object): diff --git a/asm/drhooks.asm b/asm/drhooks.asm index a5815d98..e8c48b90 100644 --- a/asm/drhooks.asm +++ b/asm/drhooks.asm @@ -176,7 +176,7 @@ org $02d9ce ; <- Bank02.asm : Dungeon_LoadEntrance 10829 (STA $A0 : STA $048E) JSL CheckDarkWorldSpawn : NOP org $01891e ; <- Bank 01.asm : 991 Dungeon_LoadType2Object (LDA $00 : XBA : AND.w #$00FF) -JSL RainPrevention : NOP #2 +JSL RainPrevention : BCC + : RTS : NOP : + org $1edabf ; <- sprite_energy_ball.asm : 86-7 Sprite_EnergyBall (LDA.b #$10 : LDX.b #$00) JSL StandardAgaDmg diff --git a/asm/overrides.asm b/asm/overrides.asm index 91029a8a..c822de5f 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -118,7 +118,7 @@ RetrieveBunnyState: + RTL RainPrevention: - LDA $00 : XBA : AND #$00FF ; what we wrote over + LDA $00 : XBA : AND #$00FF : STA.b $0A ; what we wrote over PHA LDA $7EF3C5 : AND #$00FF : CMP #$0002 : !BGE .done ; only in rain states (0 or 1) LDA.l $7EF3C6 : AND #$0004 : BNE .done ; zelda's been rescued @@ -131,9 +131,11 @@ RainPrevention: LDX #$FFFE - INX #2 : LDA.l RemoveRainDoorsRoom, X : CMP #$FFFF : BEQ .done CMP $A0 : BNE - - LDA.l RainDoorMatch, X : CMP $00 : BNE - - PLA : LDA #$0008 : RTL - .done PLA : RTL + SEP #$20 : LDA.l RainDoorMatch, X : CMP $00 : BNE .continue + REP #$20 : PLA : SEC : RTL + .continue + REP #$20 : BRA - + .done PLA : CLC : RTL ; A should be how much dmg to do to Aga when leaving this function StandardAgaDmg: diff --git a/data/base2current.bps b/data/base2current.bps index 894baf13..e4759a9c 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ