From 68c2d06d8503cf408508732cf8bc29faa472fa66 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 29 Mar 2022 14:30:20 -0600 Subject: [PATCH] Rain state prevention fix Also, disallowed door behind Throne Room to be dashable/bombable in standard/hc --- DoorShuffle.py | 10 ++++++++-- RELEASENOTES.md | 1 + Rom.py | 2 +- asm/drhooks.asm | 2 +- asm/overrides.asm | 10 ++++++---- data/base2current.bps | Bin 85662 -> 85671 bytes 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 63d50b21..55298efe 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1743,7 +1743,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]: @@ -1752,7 +1752,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] @@ -1791,6 +1792,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]) + + dashable_forbidden = { 'Swamp Trench 1 Key Ledge NW', 'Swamp Left Elbow WN', 'Swamp Right Elbow SE', 'Mire Hub WN', 'Mire Hub WS', 'Mire Hub Top NW', 'Mire Hub NE', 'Ice Dead End WS' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 185ff5f8..99541cbd 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -159,6 +159,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 dbc7e670..0a392c1f 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 894baf13fe4a7fff2cde646bfd047b7730098b6c..e4759a9cb06c9a0621447ee21979121ff6fe9960 100644 GIT binary patch delta 984 zcmW-deN06MgE=CJVQ#{` zEmtYC>n*S4Ei{bsakCXg(3{BSLb_pKkZFQ{us>KdX7K|xG1q-%Tj=VYe?2F^lbk2# zTo_kf99JzIf{Zg~2V6h_)xI`vxqF`G752ZH#baO(D>!;n|ep0NXb5mW7+7Hk#(2NVIg6y!UoI!)8ykb%%Zg zN~#nnTZ~$l{r!%xhU%OjBJcNN8&fd#G`77RktBLO7L$xCp^bm z{O~(3Ym2-B|I8MYTxdZ39gRaf#>94Bo@3&juf#X;^_`r(j?0@pyr4uqAKQ_W7ZCcC zw^dW<7LUygYwu#UE5R0o#}()_<|si+ zDsf%3z})*StMNMLR6-om`?i-xSGXiR<CHsfzcg z(Ft-B;N`@Yk>HDrM}GGQF)AP@>miAJG2Ov!+O~#jX77|lLK0mbi`?%+x5yC%|#Eu}3h6qx15*tIYobz&eo0TU+*L&PzrQ3zAGFryVD2AXu6ZXTVxCI3x2{Rg#DNEF7*!+>Jo9O0BeeAFEo$ve3$@$Ld z5yQz5!v{OSu5-safdlTPdB5|oe&O0RQEi0lI=HIV>gRaqIF)MBL%W)0Rg7>^J!dc4 z3ZnY!!>w8HqgvlM-UPp?|IO?vg&tDR1i|gY1_e;WhqAgck4m}~aFti1Ou2;_f=2Yp zyYGLOgF_#Yadx-COx;qI`UR^^u$q0cGkgPEw9zUx_unag?_m0lKcwnO`+Y-Fv=!=Jfmw;m>3g?P*3z}Zo5;k#d)5qxHH%SuSJhm2JS&1?x zEX3n1WiGh%XLOYbbKKI^JH8fDc6&?L#{)r~b|*&`;>>ZPBX)B(&J5^TpT_xo=zCA8 z=n(HvU#?T-1JO5fh8CB-8qV+`yLVkycsclv@nZVfh~9;l5*57+T5g=A=tqzA_|bD- zE&b>-AF5BB8Cf?tGy}1QWM&@S79`8J&0Y0pzG?L;JbJB1L>*oQp>D6MoI{IVl8q&& z$1Ne^?zg63(%F=ThecN$N`K~PWnLPV41tFI12-olY)<>ZguYmaAtG~%m2Tbi&#+!(e3%1Tw0HHAOb*1-vk#n;Odj`?LD3_#ZzVE3CtJu^ zpH+0(0*@0K%QfaW@4|8wnTb=ogXL`5bHS8kl25C5H~)lKKm zpAj|FuK^x2KQ$OA!+qM)D-`Kq6Z}rM>%akvv_S_s8FjSaty^uEqpMVyM43YxJXS;Q zb(3P+uY*EJrl06wdy0b_@7-7+dKP@n&}ZY9sfAj25P+li^H7*nkrAH%T2%VCw7gtKW+OTGb)px