From 4af94194614f734b51254de2c150d6d5810eb732 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 7 Apr 2023 16:01:08 -0600 Subject: [PATCH 1/8] GUI cleanup Fix Chest Game prize display --- source/gui/bottom.py | 9 --------- source/overworld/EntranceShuffle2.py | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/source/gui/bottom.py b/source/gui/bottom.py index e2e0ffc4..beb77a1f 100644 --- a/source/gui/bottom.py +++ b/source/gui/bottom.py @@ -287,13 +287,4 @@ def create_guiargs(parent): guiargs = update_deprecated_args(guiargs) - # Key drop shuffle stuff - if (hasattr(guiargs, 'retro') and guiargs.retro) or guiargs.mode == 'retro': - if guiargs.bow_mode == 'progressive': - guiargs.bow_mode = 'retro' - elif guiargs.bow_mode == 'silvers': - guiargs.bow_mode = 'retro_silvers' - guiargs.take_any = 'random' if guiargs.take_any == 'none' else guiargs.take_any - guiargs.keyshuffle = 'universal' - return guiargs diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 77790bda..572f3bb3 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -2744,7 +2744,7 @@ ow_prize_table = {'Links House': (0x8b1, 0xb2d), 'Dark Lake Hylia Ledge Hint': (0xec0, 0xc00), 'Hype Cave': (0x940, 0xc80), 'Bonk Fairy (Dark)': (0x740, 0xa80), - 'Brewery': (0x170, 0x980), 'C-Shaped House': (0x310, 0x7a0), 'Chest Game': (0x800, 0x7a0), + 'Brewery': (0x170, 0x980), 'C-Shaped House': (0x310, 0x7a0), 'Chest Game': (0x080, 0x7a0), 'Hammer Peg Cave': (0x4c0, 0x940), 'Red Shield Shop': (0x500, 0x680), 'Dark Sanctuary Hint': (0x720, 0x4a0), From 2abfc6ea80ed0bbf0fe27e9e1f36172ec44bf8fb Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 13 Apr 2023 16:19:18 -0600 Subject: [PATCH 2/8] Swap E/W on Mire Torches/Mire Attic Hint --- DoorShuffle.py | 2 +- Doors.py | 4 ++-- Regions.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index b236cd9e..a0add44b 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -4156,7 +4156,7 @@ interior_doors = [ ('Mire Neglected Room SE', 'Mire Chest View NE'), ('Mire BK Chest Ledge WS', 'Mire Warping Pool ES'), # technically one-way ('Mire Torches Top SW', 'Mire Torches Bottom NW'), - ('Mire Torches Bottom WS', 'Mire Attic Hint ES'), + ('Mire Torches Bottom ES', 'Mire Attic Hint WS'), ('Mire Dark Shooters SE', 'Mire Key Rupees NE'), ('Mire Dark Shooters SW', 'Mire Block X NW'), ('Mire Tall Dark and Roomy WS', 'Mire Crystal Right ES'), diff --git a/Doors.py b/Doors.py index e97505ee..4020caff 100644 --- a/Doors.py +++ b/Doors.py @@ -924,9 +924,9 @@ def create_doors(world, player): create_door(player, 'Mire Torches Top SW', Intr).dir(So, 0x97, Left, High).pos(1), create_door(player, 'Mire Torches Bottom Holes', Hole), create_door(player, 'Mire Torches Bottom NW', Intr).dir(No, 0x97, Left, High).pos(1), - create_door(player, 'Mire Torches Bottom WS', Intr).dir(We, 0x97, Bot, High).pos(0), + create_door(player, 'Mire Torches Bottom ES', Intr).dir(Ea, 0x97, Bot, High).pos(0), create_door(player, 'Mire Torches Top Holes', Hole), - create_door(player, 'Mire Attic Hint ES', Intr).dir(Ea, 0x97, Bot, High).pos(0), + create_door(player, 'Mire Attic Hint WS', Intr).dir(We, 0x97, Bot, High).pos(0), create_door(player, 'Mire Attic Hint Hole', Hole), create_door(player, 'Mire Dark Shooters Up Stairs', Sprl).dir(Up, 0x93, 0, LTH).ss(A, 0x32, 0xec), create_door(player, 'Mire Dark Shooters SW', Intr).dir(So, 0x93, Left, High).pos(0), diff --git a/Regions.py b/Regions.py index bcbb76d4..7b0e2535 100644 --- a/Regions.py +++ b/Regions.py @@ -691,8 +691,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Mire BK Chest Ledge', 'Misery Mire', ['Misery Mire - Big Key Chest'], ['Mire BK Chest Ledge WS']), create_dungeon_region(player, 'Mire Warping Pool', 'Misery Mire', None, ['Mire Warping Pool ES', 'Mire Warping Pool Warp']), create_dungeon_region(player, 'Mire Torches Top', 'Misery Mire', None, ['Mire Torches Top Down Stairs', 'Mire Torches Top SW', 'Mire Torches Top Holes']), - create_dungeon_region(player, 'Mire Torches Bottom', 'Misery Mire', None, ['Mire Torches Bottom NW', 'Mire Torches Bottom WS', 'Mire Torches Bottom Holes']), - create_dungeon_region(player, 'Mire Attic Hint', 'Misery Mire', None, ['Mire Attic Hint ES', 'Mire Attic Hint Hole']), + create_dungeon_region(player, 'Mire Torches Bottom', 'Misery Mire', None, ['Mire Torches Bottom NW', 'Mire Torches Bottom ES', 'Mire Torches Bottom Holes']), + create_dungeon_region(player, 'Mire Attic Hint', 'Misery Mire', None, ['Mire Attic Hint WS', 'Mire Attic Hint Hole']), create_dungeon_region(player, 'Mire Dark Shooters', 'Misery Mire', None, ['Mire Dark Shooters Up Stairs', 'Mire Dark Shooters SW', 'Mire Dark Shooters SE']), create_dungeon_region(player, 'Mire Key Rupees', 'Misery Mire', None, ['Mire Key Rupees NE']), create_dungeon_region(player, 'Mire Block X', 'Misery Mire', None, ['Mire Block X NW', 'Mire Block X WS']), From 072bbfac1fbba43c1dffbc836786e369e4dfe17b Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 13 Apr 2023 16:20:54 -0600 Subject: [PATCH 3/8] Version bump and release note --- Main.py | 2 +- RELEASENOTES.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Main.py b/Main.py index 8f97ef46..62d519ed 100644 --- a/Main.py +++ b/Main.py @@ -34,7 +34,7 @@ from source.overworld.EntranceShuffle2 import link_entrances_new from source.tools.BPS import create_bps_from_data from source.classes.CustomSettings import CustomSettings -version_number = '1.2.0.15' +version_number = '1.2.0.16' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 71b3ec75..4ae675a6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -109,6 +109,9 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes +* 1.2.0.16u + * Fix for Mire Attic Hint door (direction was swapped) + * Dungeon at Chest Game displays correctly on OW map option * 1.2.0.15u * GUI reorganization * Logic fix for pots in GT conveyor cross From ea8bd117fcc9dcbe34c65f05adacd7ceff74cf08 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 14 Apr 2023 14:17:57 -0600 Subject: [PATCH 4/8] Fix for partial key logic for vanilla mire Fix for Kholdstare shell collision --- RELEASENOTES.md | 2 ++ Rom.py | 2 +- Rules.py | 38 +++++++++++++++++++++++++++++++++++++- data/base2current.bps | Bin 93979 -> 94044 bytes 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 4ae675a6..a84d0551 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -110,6 +110,8 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes * 1.2.0.16u + * Fix for partial key logic on vanilla Mire + * Fix for Kholdstare Shell collision when at Lanmo 2 * Fix for Mire Attic Hint door (direction was swapped) * Dungeon at Chest Game displays correctly on OW map option * 1.2.0.15u diff --git a/Rom.py b/Rom.py index b7285b2e..ea0b9c68 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '29863ca305a8474c452cd13b3f921898' +RANDOMIZERBASEHASH = '9903cdfc3fc69112919ec49fb63e09ab' class JsonRom(object): diff --git a/Rules.py b/Rules.py index e8dc7aa5..fc608ec2 100644 --- a/Rules.py +++ b/Rules.py @@ -2000,7 +2000,9 @@ def add_key_logic_rules(world, player): key_logic = world.key_logic[player] eval_func = eval_small_key_door if world.key_logic_algorithm[player] == 'strict' and world.keyshuffle[player] == 'wild': - eval_func = eval_small_key_door_strict + eval_func = eval_small_key_door_strict + elif world.key_logic_algorithm[player] != 'default': + eval_func = eval_small_key_door_partial for d_name, d_logic in key_logic.items(): for door_name, rule in d_logic.door_rules.items(): door_entrance = world.get_entrance(door_name, player) @@ -2056,6 +2058,36 @@ def eval_small_key_door_main(state, door_name, dungeon, player): return door_openable +def eval_small_key_door_partial_main(state, door_name, dungeon, player): + if state.is_door_open(door_name, player): + return True + key_logic = state.world.key_logic[player][dungeon] + if door_name not in key_logic.door_rules: + return False + door_rule = key_logic.door_rules[door_name] + door_openable = False + for ruleType, number in door_rule.new_rules.items(): + if door_openable: + return True + if ruleType == KeyRuleType.WorstCase: + number = min(number, door_rule.small_key_num) + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) + elif ruleType == KeyRuleType.AllowSmall: + small_loc_item = door_rule.small_location.item + if small_loc_item and small_loc_item.name == key_logic.small_key_name and small_loc_item.player == player: + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) + elif isinstance(ruleType, tuple): + lock, lock_item = ruleType + # this doesn't track logical locks yet, i.e. hammer locks the item and hammer is there, but the item isn't + for loc in door_rule.alternate_big_key_loc: + spot = state.world.get_location(loc, player) + if spot.item and spot.item.name == lock_item: + number = min(number, door_rule.alternate_small_key) + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) + break + return door_openable + + def eval_small_key_door_strict_main(state, door_name, dungeon, player): if state.is_door_open(door_name, player): return True @@ -2070,6 +2102,10 @@ def eval_small_key_door(door_name, dungeon, player): return lambda state: eval_small_key_door_main(state, door_name, dungeon, player) +def eval_small_key_door_partial(door_name, dungeon, player): + return lambda state: eval_small_key_door_partial_main(state, door_name, dungeon, player) + + def eval_small_key_door_strict(door_name, dungeon, player): return lambda state: eval_small_key_door_strict_main(state, door_name, dungeon, player) diff --git a/data/base2current.bps b/data/base2current.bps index 832779a30453f400fad4258196d067eb09eafe59..e58c28ab1b469f73a96a04d2e5d5d50a2ca92b26 100644 GIT binary patch delta 2245 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 From ee9fc3c6b13bb30cb360dcf62f3e6357efdcc307 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sat, 15 Apr 2023 05:18:40 -0500 Subject: [PATCH 5/8] Animate standing rupees for enemy drops --- Rom.py | 2 +- data/base2current.bps | Bin 106183 -> 106249 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index cb340f55..c6695728 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'c7dd0d311c13811cce9a2c384819744c' +RANDOMIZERBASEHASH = 'c24de4a717cea429d20d0e5510df2edd' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 40f28c289d165dba1f53d85fc5c36c15a9ab9e43..d0b70bcdd8a3ab733d43950533b152e3e644c4e1 100644 GIT binary patch delta 8326 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 delta 8333 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 From 608e01c906f2dd14eb8ea4ae8098e22c6fe9de8b Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 16 Apr 2023 04:37:50 -0500 Subject: [PATCH 6/8] Fix pottery to retain gfx during map check --- Rom.py | 2 +- data/base2current.bps | Bin 106249 -> 106284 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index c6695728..cfa99828 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'c24de4a717cea429d20d0e5510df2edd' +RANDOMIZERBASEHASH = 'f5f779f1820204cd019ca5293594f955' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index d0b70bcdd8a3ab733d43950533b152e3e644c4e1..49650e2da50eb26d5f164437c9493f2468ba1965 100644 GIT binary patch delta 181 zcmV;m080Ofz6Pwm29SyYXOWAK3rL5RTnMtL>gsT(lNJA*0q_XP4)6$EZ0CSngy#UMP>mNMToQ=@m#{hkQvtA-1Umsj40W@B60?M{!XT*? jvzJmk0X70CE|-cs0Yd_7V7JdZ0WxC<>;2Ci_nUF2m70vvL8$#U3AlLoczZ%FwmqAY4)A z0OBy0U%Hieh{7 Date: Sun, 7 May 2023 20:19:18 -0500 Subject: [PATCH 7/8] Big ROM changes - New Item GFX code - Fixed Bonk Dupe issue - Fixed Bonk Despawn issue --- Rom.py | 2 +- asm/owrando.asm | 46 ++++++++++++++++++++++++++---------------- data/base2current.bps | Bin 106284 -> 106730 bytes 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/Rom.py b/Rom.py index cfa99828..aa09743e 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f5f779f1820204cd019ca5293594f955' +RANDOMIZERBASEHASH = '3c651a38ea79504029c71b382c9c17da' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 55420da0..166aa1e0 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -424,14 +424,16 @@ LoadMapDarkOrMixed: OWBonkGoodBeeDrop: { - LDA.l OWFlags+1 : AND.b #$02 : BNE .shuffled + LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE .shuffled .vanilla ; what we wrote over STZ.w $0DD0,X LDA.l BottleContentsOne : ORA.l BottleContentsTwo ORA.l BottleContentsThree : ORA.l BottleContentsFour RTL .shuffled - PHY : TXY + LDA.w $0DD0,X : BNE + + JMP .return+1 + + PHY : TXY LDA.l RoomDataWRAM[$0120].high : AND.b #$02 : PHA : BNE + ; check if collected LDA.b #$1B : STA $12F ; JSL Sound_SetSfx3PanLong ; seems that when you bonk, there is a pending bonk sfx, so we clear that out and replace with reveal secret sfx + @@ -495,33 +497,37 @@ OWBonkGoodBeeDrop: ; spawn itemget item .spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : BRA .return - + LDA.b #$01 : STA !REDRAW + + PHA + + LDA.b #$01 : STA !FORCE_HEART_SPAWN LDA.b #$EB : STA.l $7FFE00 JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite - TYX : STZ.w $0F20,X ; layer the sprite is on - + LDA.b #$01 : STA.w !SPRITE_REDRAW,Y + + PLA : STA.w $0E80,Y + ; affects the rate the item moves in the Y/X direction - STZ.w $0D40,X + LDA.b #$00 : STA.w $0D40,Y LDA.b #$0A : STA.w $0D50,Y LDA.b #$1A : STA.w $0F80,Y ; amount of force (gives height to the arch) LDA.b #$FF : STA.w $0B58,Y ; stun timer LDA.b #$30 : STA.w $0F10,Y ; aux delay timer 4 ?? dunno what that means + LDA.b #$00 : STA.w $0F20,Y ; layer the sprite is on + ; sets the tile type that is underneath the sprite, water - LDA.b #$09 : STA.l $7FF9C2,X ; TODO: Figure out how to get the game to set this + TYX : LDA.b #$09 : STA.l $7FF9C2,X ; TODO: Figure out how to get the game to set this ; sets OW event bitmask flag, uses free RAM LDA.l OWBonkPrizeTable[42].flag : STA.w $0ED0,Y - + ; determines the initial spawn point of item LDA.w $0D00,Y : SEC : SBC.l OWBonkPrizeTable[42].vert_offset : STA.w $0D00,Y LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y - LDA.b #$01 : STA !REDRAW - .return PLY LDA #$08 ; makes original good bee not spawn @@ -533,8 +539,10 @@ OWBonkDrops: { CMP.b #$D8 : BEQ + RTL - + LDA.l OWFlags+1 : AND.b #!FLAG_OW_CROSSED : BNE + + + LDA.l OWFlags+1 : AND.b #!FLAG_OW_BONKDROP : BNE + JSL.l Sprite_TransmuteToBomb : RTL + + LDA.w $0DD0,Y : BNE + + RTL + ; loop thru rando bonk table to find match @@ -618,13 +626,17 @@ OWBonkDrops: ; spawn itemget item .spawn_item ; A = item id ; Y = tree sprite slot ; S = Collected, FlagBitmask, X (row + 2) PLX : BEQ + : LDA.b #$00 : STA.w $0DD0,Y : JMP .return ; S = FlagBitmask, X (row + 2) - + LDA 2,S : TAX : INX + + PHA - LDA.b #$01 : STA !REDRAW + LDA.b #$01 : STA !FORCE_HEART_SPAWN LDA.b #$EB : STA.l $7FFE00 JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite + LDA.b #$01 : STA.w !SPRITE_REDRAW,Y + + PLA : STA.w $0E80,Y + ; affects the rate the item moves in the Y/X direction LDA.b #$00 : STA.w $0D40,Y LDA.b #$0A : STA.w $0D50,Y @@ -637,14 +649,12 @@ OWBonkDrops: ; sets OW event bitmask flag, uses free RAM PLA : STA.w $0ED0,Y ; S = X (row + 2) - + ; determines the initial spawn point of item PLX : INX : INX : INX LDA.w $0D00,Y : SEC : SBC.w OWBonkPrizeData,X : STA.w $0D00,Y LDA.w $0D20,Y : SBC #$00 : STA.w $0D20,Y - LDA.b #$01 : STA !REDRAW - PLB : RTL .return @@ -958,7 +968,9 @@ OWNewDestination: OWLoadSpecialArea: { LDA.l Overworld_LoadSpecialOverworld_RoomId,X : STA.b $A0 - JSL Overworld_LoadSpecialOverworld ; sets M and X flags + CMP.w #$0182 : BNE + + JSL ZoraSplashGfxFix + + JSL Overworld_LoadSpecialOverworld ; sets M and X flags TYX LDY.b #$00 CPX.b #$01 : BNE + ; check if going to water transition diff --git a/data/base2current.bps b/data/base2current.bps index 49650e2da50eb26d5f164437c9493f2468ba1965..ab93a09e84c87d32990525473ea45acda28d3f49 100644 GIT binary patch delta 15397 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 TcFFN3AK~tM=Jm(lbiMw6_fO6& delta 14923 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 R-r^_t_1|0mkJoMR{(n{5-pl|1 From e1092b7def51af7d2640ce0e2c6aa1ccaaffe3c1 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 7 May 2023 20:29:16 -0500 Subject: [PATCH 8/8] Version bump 0.3.0.7 --- CHANGELOG.md | 12 ++++++++++-- OverworldShuffle.py | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 135502b5..23e4234e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,18 @@ # Changelog +## 0.3.0.7 +- \~Merged in DR v1.2.0.16~ +- Major overhaul of how item GFX are drawn on screen + - Bonk prize GFX can now all be displayed simultaneously + - Rupee items that are in-plain-sight are now animated + - Narrow items are now centered within their tile space + - Fixed issue with pottery items showing bad GFX after map check or medallion use +- Fixed issue with bonk drop items causing duplicate sprite spawns + ## 0.3.0.6 - \~Merged in DR v1.2.0.15~ - Fixed Tower of Hera music silence issue -- Improved GT crystal cutscene -- Fixed issue with bonk drop items causing duplicate sprite spawns +- Improved symmetrical GT crystal cutscene - Changed bonk prizes to not mark as collected unless it is visible on screen ## 0.3.0.5 diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 3e3cf192..301af8cb 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -7,7 +7,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.3.0.6' +version_number = '0.3.0.7' # branch indicator is intentionally different across branches version_branch = '-u'