From 060092a53eeecbf59e3cf6f3d397f56e842f884e Mon Sep 17 00:00:00 2001 From: Thomas Prescott Date: Fri, 3 Mar 2023 21:55:02 -0600 Subject: [PATCH 01/24] add ability to disable forfeits --- MultiServer.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MultiServer.py b/MultiServer.py index 4108b8dd..cf9cd952 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -46,6 +46,9 @@ class Context: self.lookup_name_to_id = {} self.lookup_id_to_name = {} + self.disable_client_forfeit = False + + async def send_msgs(websocket, msgs): if not websocket or not websocket.open or websocket.closed: return @@ -281,6 +284,9 @@ async def process_client_cmd(ctx : Context, client : Client, cmd, args): if args.startswith('!players'): notify_all(ctx, get_connected_players_string(ctx)) if args.startswith('!forfeit'): + if ctx.disable_client_forfeit: + notify_client(client, 'Forfeit is currently disabled server-side.') + return forfeit_player(ctx, client.team, client.slot) if args.startswith('!countdown'): try: From 35e7784445dc2b67dd50a4393e10617b481094a9 Mon Sep 17 00:00:00 2001 From: Thomas Prescott Date: Mon, 6 Mar 2023 23:21:24 -0600 Subject: [PATCH 02/24] clarify forfeit disabled --- MultiServer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MultiServer.py b/MultiServer.py index cf9cd952..a9f9e9e2 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -285,9 +285,9 @@ async def process_client_cmd(ctx : Context, client : Client, cmd, args): notify_all(ctx, get_connected_players_string(ctx)) if args.startswith('!forfeit'): if ctx.disable_client_forfeit: - notify_client(client, 'Forfeit is currently disabled server-side.') - return - forfeit_player(ctx, client.team, client.slot) + notify_client(client, 'Client-initiated forfeits are disabled. Please ask the host of this game to forfeit on your behalf.') + else: + forfeit_player(ctx, client.team, client.slot) if args.startswith('!countdown'): try: timer = int(args.split()[1]) From 1bb4d5f03b7fa5a1dda2a9d1925abc9e27355078 Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 9 Mar 2023 11:14:13 -0700 Subject: [PATCH 03/24] Version bump and note --- Main.py | 2 +- RELEASENOTES.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Main.py b/Main.py index 11138c65..7d3ae0eb 100644 --- a/Main.py +++ b/Main.py @@ -31,7 +31,7 @@ from Utils import output_path, parse_player_names from source.item.FillUtil import create_item_pool_config, massage_item_pool, district_item_pool_config from source.tools.BPS import create_bps_from_data -__version__ = '1.1.4-dev' +__version__ = '1.1.5-dev' from source.classes.BabelFish import BabelFish diff --git a/RELEASENOTES.md b/RELEASENOTES.md index fd66faff..4c65204f 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -181,6 +181,8 @@ Same as above but both small keys and bigs keys of the dungeon are not allowed o # Bug Fixes and Notes +* 1.1.5 + * MultiServer can not disable forfeits if desired * 1.1.4 * Removed a Triforce text * Fix for Desert Tiles 1 key door From b44caa76a7c7178e4696355c8706f2dd8c9f063d Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 13 Mar 2023 14:26:25 -0600 Subject: [PATCH 04/24] Customize certain potions refills. --- Fill.py | 7 ++++--- Main.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Fill.py b/Fill.py index 4859ebc3..9acf7d45 100644 --- a/Fill.py +++ b/Fill.py @@ -661,9 +661,10 @@ def sell_potions(world, player): for potion in ['Green Potion', 'Blue Potion', 'Red Potion']: location = random.choice(filter_locations(ItemFactory(potion, player), locations, world, potion=True)) locations.remove(location) - p_item = next(item for item in world.itempool if item.name == potion and item.player == player) - world.push_item(location, p_item, collect=False) - world.itempool.remove(p_item) + p_item = next((item for item in world.itempool if item.name == potion and item.player == player), None) + if p_item: + world.push_item(location, p_item, collect=False) + world.itempool.remove(p_item) def sell_keys(world, player): diff --git a/Main.py b/Main.py index f731df8a..f6631ce5 100644 --- a/Main.py +++ b/Main.py @@ -250,6 +250,7 @@ def main(args, seed=None, fish=None): set_rules(world, player) district_item_pool_config(world) + fill_specific_items(world) for player in range(1, world.players + 1): if world.shopsanity[player]: sell_potions(world, player) @@ -262,7 +263,6 @@ def main(args, seed=None, fish=None): if args.print_custom_yaml: world.settings.record_item_pool(world) dungeon_tracking(world) - fill_specific_items(world) logger.info(world.fish.translate("cli", "cli", "placing.dungeon.prizes")) fill_prizes(world) From f4524d8a871c104b605da39590d30bdf5c6a7cef Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 13 Mar 2023 16:28:11 -0600 Subject: [PATCH 05/24] Fix Snitch Lady (West) location on map --- source/overworld/EntranceShuffle2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 51a702dd..0aa18e92 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -3001,7 +3001,7 @@ ow_prize_table = {'Links House': (0x8b1, 0xb2d), 'Inverted Big Bomb Shop': (0x8b 'Lost Woods Gamble': (0x240, 0x080), 'Fortune Teller (Light)': (0x2c0, 0x4c0), 'Snitch Lady (East)': (0x310, 0x7a0), - 'Snitch Lady (West)': (0x800, 0x7a0), + 'Snitch Lady (West)': (0x080, 0x7a0), 'Bush Covered House': (0x2e0, 0x880), 'Tavern (Front)': (0x270, 0x980), 'Light World Bomb Hut': (0x070, 0x980), From 02c7a5279cde735a0a149199034d7bc4b107a841 Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 13 Mar 2023 20:40:45 -0600 Subject: [PATCH 06/24] Fix some paired doors --- DoorShuffle.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 6bafd806..6a954f3c 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1813,7 +1813,8 @@ def shuffle_door_types(door_type_pools, paths, world, player): for dungeon, doors in custom_dict.items(): all_custom[dungeon].extend(doors) - world.paired_doors[player].clear() + for pd in world.paired_doors[player]: + pd.pair = False used_doors = shuffle_trap_doors(door_type_pools, paths, start_regions_map, all_custom, world, player) # big keys used_doors = shuffle_big_key_doors(door_type_pools, used_doors, start_regions_map, all_custom, world, player) From b2b3d789cad2a9553cf3789cc507c97fe9e55414 Mon Sep 17 00:00:00 2001 From: aerinon Date: Mon, 13 Mar 2023 20:42:55 -0600 Subject: [PATCH 07/24] Some rom fixes: - standing item data now cleared on dungeon exit Escape assist won't fill arrows resulting in free quiver in retro bow mode --- Rom.py | 2 +- data/base2current.bps | Bin 93952 -> 93980 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 0ca8e140..2fa2dee5 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '4faba57f154a2263bf91af041a0d8700' +RANDOMIZERBASEHASH = '15edc718abbbd94ee34e15ae24b219a3' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 5a239f15ad6edbb9e939796d1ecad384d3162259..aa3b0b2195ea6804734645a963163a4ac524d11b 100644 GIT binary patch delta 9289 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 From 5ce983513f9f4d6b46ac5bae87624419aff384fa Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 13 Mar 2023 21:57:11 -0500 Subject: [PATCH 08/24] Fixed incorrect edge coord data for Desert Pass WS --- OWEdges.py | 4 ++-- asm/owrando.asm | 4 ++-- data/base2current.bps | Bin 105783 -> 105783 bytes 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OWEdges.py b/OWEdges.py index 1e40a0c4..cf397f18 100644 --- a/OWEdges.py +++ b/OWEdges.py @@ -143,7 +143,7 @@ def create_owedges(world, player): create_owedge(player, 'Tree Line WC', 0x2e, We, Wr, 0x1a) .coordInfo(0x0b3c, 0x0660), create_owedge(player, 'Eastern Nook NE', 0x2f, No, Ld, 0x16) .coordInfo(0x0f78, 0x1820), create_owedge(player, 'Desert EC', 0x30, Ea, Ld, 0x1e, 0x39).coordInfo(0x0ee4, 0x1480), - create_owedge(player, 'Desert ES', 0x30, Ea, Ld, 0x1f, 0x39).coordInfo(0x0f8c, 0x1980), + create_owedge(player, 'Desert ES', 0x30, Ea, Ld, 0x1f, 0x39).coordInfo(0x0f90, 0x1980), create_owedge(player, 'Flute Boy Approach NW', 0x32, No, Ld, 0x17) .coordInfo(0x044c, 0x1800), create_owedge(player, 'Flute Boy Approach NC', 0x32, No, Ld, 0x18) .coordInfo(0x04e8, 0x180c), create_owedge(player, 'Flute Boy Approach EC', 0x32, Ea, Ld, 0x1a) .coordInfo(0x0d04, 0x05c0), @@ -167,7 +167,7 @@ def create_owedges(world, player): create_owedge(player, 'Ice Cave SW', 0x37, So, Wr, 0x1e) .coordInfo(0x0e80, 0x1002), create_owedge(player, 'Ice Cave SE', 0x37, So, Ld, 0x1f) .coordInfo(0x0f50, 0x101c), create_owedge(player, 'Desert Pass WC', 0x3a, We, Ld, 0x1f) .coordInfo(0x0ee4, 0x03e0), - create_owedge(player, 'Desert Pass WS', 0x3a, We, Ld, 0x20) .coordInfo(0x0f8c, 0x0860), + create_owedge(player, 'Desert Pass WS', 0x3a, We, Ld, 0x20) .coordInfo(0x0f90, 0x0860), create_owedge(player, 'Desert Pass EC', 0x3a, Ea, Ld, 0x20) .coordInfo(0x0f18, 0x0640), create_owedge(player, 'Desert Pass ES', 0x3a, Ea, Ld, 0x21) .coordInfo(0x0fcb, 0x08c0), create_owedge(player, 'Dam NC', 0x3b, No, Ld, 0x1e) .coordInfo(0x0728, 0x1816), diff --git a/asm/owrando.asm b/asm/owrando.asm index c65ca10c..c6878285 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -1407,7 +1407,7 @@ dw $0c78, $0ce3, $006b, $0cad, $3434, $0000, $0000, $001b dw $0ce4, $0d33, $004f, $0d0b, $3434, $0000, $0001, $001c dw $0d34, $0db8, $0084, $0d76, $3434, $0000, $0000, $001d dw $0ea8, $0f20, $0078, $0ee4, $3a3a, $0000, $0000, $001e -dw $0f70, $0fa8, $0038, $0f8c, $3a3a, $0000, $0000, $001f +dw $0f78, $0fa8, $0030, $0f90, $3a3a, $0000, $0000, $001f dw $0f18, $0f18, $0000, $0f18, $3b3b, $0000, $0000, $0020 dw $0fc8, $0fc8, $0000, $0fc8, $3b3b, $0000, $0000, $0021 dw $0e28, $0fb8, $0190, $0ef0, $3c3c, $0000, $0000, $0022 @@ -1482,7 +1482,7 @@ dw $0c78, $0ce3, $006b, $0cad, $3333, $0000, $0000, $001c dw $0ce4, $0d33, $004f, $0d0b, $3333, $0000, $0001, $001d dw $0d34, $0db8, $0084, $0d76, $3333, $0000, $0000, $001e dw $0ea8, $0f20, $0078, $0ee4, $3039, $0000, $0000, $001f -dw $0f70, $0fa8, $0038, $0f8c, $3039, $0000, $0000, $0020 +dw $0f78, $0fa8, $0030, $0f90, $3039, $0000, $0000, $0020 dw $0f18, $0f18, $0000, $0f18, $3a3a, $0000, $0000, $0021 dw $0fc8, $0fc8, $0000, $0fc8, $3a3a, $0000, $0000, $0022 dw $0e28, $0fb8, $0190, $0ef0, $3b3b, $0000, $0000, $0023 diff --git a/data/base2current.bps b/data/base2current.bps index afa8a1642722bfba64456decd9b60135f452e931..0ed1d01ce03f420c88e1cac5ad40768007df7aa9 100644 GIT binary patch delta 74 zcmV-Q0JZ19P=jd!w`l<{9 From 2338b3e4e782f19caff77de81eb8ce0403215054 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 14 Mar 2023 06:20:26 -0500 Subject: [PATCH 09/24] Fixed item duping issue on OW --- asm/owrando.asm | 30 ++++++++++++++++++++++++++++++ data/base2current.bps | Bin 105783 -> 105806 bytes 2 files changed, 30 insertions(+) diff --git a/asm/owrando.asm b/asm/owrando.asm index c6878285..627b5503 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -40,6 +40,10 @@ JSL OWAdjustExitPosition org $02c1a9 JSL OWEndScrollTransition +; org $09AFFB +; jsl OWDestroyDuplicateSprites : nop #2 ; LDA.w $0C9A,X : CMP.w $040A +; db $B0 ; changing following opcode to BCS + org $04E881 Overworld_LoadSpecialOverworld_RoomId: org $04E8B4 @@ -238,6 +242,28 @@ OWWhirlpoolEnd: RTL } +OWDestroyItemSprites: +{ + LDX.b #$0F + .nextSprite + LDA.w $0E20,X + CPY.b #$D8 : BCC .continue + CPY.b #$EC : BCS .continue + .killSprite ; need to kill sprites from D8 to EB on screen transition + STZ.w $0DD0,X + .continue + DEX : BPL .nextSprite + RTL + ; LDA.w $0C9A,X : CMP.w $040A ; what we wrote over + ; BNE .killSprite + ; ; need to kill sprites from D8 to EB + ; CPY.b #$D8 : BCC .keepSprite + ; CPY.b #$EC : BCS .keepSprite + ; .killSprite + ; CLC : RTL + ; .keepSprite + ; SEC : RTL +} OWMirrorSpriteOnMap: { lda.w $1ac0,x : bit.b #$f0 : beq .continue @@ -648,6 +674,10 @@ OWBonkSpritePrep: org $aa9000 OWDetectEdgeTransition: { + PHY : PHX + JSL OWDestroyItemSprites + PLX : PLY + STZ.w $06FC LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla JSR OWShuffle diff --git a/data/base2current.bps b/data/base2current.bps index 0ed1d01ce03f420c88e1cac5ad40768007df7aa9..6905656b3ffb644a3b43466e4ea408bce0341e38 100644 GIT binary patch delta 1096 zcmWksdrVVz6u#%Sy={4vG6py%qbce@9x~pOS6iHbc7kqW8v_R!nz}2vOicoZbqK`WJs(uLk3bQw>QdvLAyHS!Bj=0pW{^_gU<>gAF zMSW~wp*iXNgi2zJS#422WzR{nAcOrza#%TF=9ZW1j83)2%$ZJ?KXIp0tt4D$XJzSd z&iz#O2w=ti(65_>R@NGL^M!*JZdqf#sBX7iQkUK7?T9SsS_v&}wdAtL6p7$wdlW~3 zb^8b9C4=6*SNp@i4W2f-+BGDS@>Iw1l8&+JVERhXq)IV;>wdU86# z!t)|0K}Wi}O6u*G>0uG#Vo6@gRvkx1zyTlr(kUID`|B((W2>KdeL(jqy+J;aYRPOc z7|QPsOKiH`eZR|w79!-D=7oq#Vc?7}H#vi(J-$GJl&?B|G;YQ<_{%JalAR2RLPoir z##334`CNTYV;>*T_t>lPQBGjF;kU3n8>%1^)7fw`ZjY6*o-uk|K8f>`e!JDH^GVh3 z3{m<-t2b59Zf|I50$9>-$BG=tgfd)^1Gz%`A_v|Ki+Q;h2gkP!F)1Yt^-dY>y~P7g z#(WOsrG-9EB2zTjWeO54Iz-%qNn)aKqwtbBgMPVb&S1M@nr(8NpSjs29HX4KH|b|_ zbuPRgR}ejhx6mzaRYre{zO;Fb$2D~%niQaeKZlO zzz2P+y!H=e-8-ntZymgsME9g3BZsx89i6;l$~DF}ji? z()@RpUfM@UC#DE9$H)=;N`M$y3h$}#OCO7nvDjW}yT~=hYBtpnQdmVM|u}25la0Wltff_tGG#?VTdfF;&;`m5p^s`s? zEc!%x)XoU8@e(}ggoQmQ$>(P;z=nK?C*}FLBOi(aYCq{`cuTmCv`J6km3&Cwp{(m4 zs;-y@Ushj*SInoeGiF#{U4j#76)C delta 1035 zcmW-feM}p57{~9qw%3DEU^3V!Af><@!k{1^Nr9H~x=|eiU33=4k~&Kcm{G#pCR`^N zN+BIw;TPyemz6SmT3c5Q0wQRFrp(#0__mp4xEQn5L~pu(G+?~?&+~lq`967`JWrl) zmWjn>!uu)+cR#?7``VxmV4v?gehlDK1{dCi$IP}c3v!r9(aWj37g_Ael>EDQ=R=`Z zqe*`DT3}o;v?3E34?UWYhnNc@CFC)miO$3_BWx(tWpv5aBkb@w-L|ign8aa@`HC!t zPT#-e9{@l2eviC_!vJHJ+(Gx8r>rxZP30xSJ;+<{iw=Yp10nKLN zoY)!bkKq9IG|tY5J)3_Ga3rID><y)L3ht1vPo;44@q}G8lfH!NLzWs zm7^PWiRXe6Uh5t?zBMMJ>hse~BJwC9iEM~VrHv8xN_0yJB~LV#jXJp~=bwIckZ=LR zdJd!HQaBA6XrL5&vy06Z^IJy0Hz;!TX%ozTO;9X<$xUdbW`7~iZiiVBFYag)P+A$3 zKn*%s2IYL3DT5ahu&3rxTej70d8T2o-$hdXANiFck)Rw@MICWCJ)92qRtZjTIRxy3 zRcxg$95~UYLHqsKronb~*f-`F+E^UphY_yZ2edxaQx2!HQ`47F1~uX9Enb+=YR3QJ zP<0nhukzA?vk$^OEHmo^o6pj%T?kZgI9_1Qt95K$+95nR&BpK-=15s4s#if0F=Q>F zY$d2&1-eAle*QEGfeRn&n+;#&8y0ZqkWS^o9SZcb3gR=AlkeSEP;-T}kwy9E95Y<> zns>kyH&y1#WBqntFGDy7N3HURlFNSW5)Wq(up7Q{8V927 z8;{vLZI{{6EcJm7Ol&)jUQ9SL3W2C)zZYwCz_D)&&pYdZH?t;KkS`m!2pF(d}LJodf zgFdW;BT+4HELb?x{vdAa=|V&m6z{{j7To&gbqFe*&3++Q#B4BP)KCS9_<0GUs-PmZ zLK8=C{JK}~rQY8mIN{A5g1XoJIo@=$rZbwh*Dl_uf_90J8tQuoDI39@9D5y;<$gqZ zFF>Mqwh65z;i3Nk!<(H3 From e55d23915cf3f7bd10276efe5bee6579a1328d6c Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 14 Mar 2023 06:21:42 -0500 Subject: [PATCH 10/24] Improved Standard+Inverted preset yaml --- docs/standardinverted.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/standardinverted.yaml b/docs/standardinverted.yaml index c5590090..8195851a 100644 --- a/docs/standardinverted.yaml +++ b/docs/standardinverted.yaml @@ -4,7 +4,15 @@ settings: 1: mode: standard ow_mixed: true +entrances: + 1: + entrances: + Sanctuary Grave: Sewer Drop + two-way: + Sanctuary: Sanctuary Exit ow-tileflips: 1: + force_no_flip: + - 0x13 undefined_chance: 100 From 636819ffc00c27e7befe0e9aa800ca02fc529606 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 14 Mar 2023 16:05:28 -0600 Subject: [PATCH 11/24] Versioning update --- Main.py | 4 +++- RELEASENOTES.md | 9 +++++++-- Rom.py | 4 +++- data/base2current.bps | Bin 93980 -> 93979 bytes 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Main.py b/Main.py index f6631ce5..69476418 100644 --- a/Main.py +++ b/Main.py @@ -34,7 +34,9 @@ from source.overworld.EntranceShuffle2 import link_entrances_new from source.tools.BPS import create_bps_from_data from source.classes.CustomSettings import CustomSettings -__version__ = '1.2.0.12u' +version_number = '1.2.0.13' +version_branch = '-u' +__version__ = f'{version_number}{version_branch}' from source.classes.BabelFish import BabelFish diff --git a/RELEASENOTES.md b/RELEASENOTES.md index fbfdfe5c..e2c23a11 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -109,8 +109,13 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes -* Unreleased Version - * MultiServer can not disable forfeits if desired +* 1.2.0.13u + * Allow green/blue potion refills to be customized + * OW Map showing dungeon entrance at Snitch Lady (West) fixed (instead of @ HC Courtyard) + * Standing item data is cleared on transition to overworld (enemy drops won't bleed to overworld sprites) + * Escape assist won't give you a free quiver in retro bow mode + * Fixed an issue where a door would be opened magically (due to original pairing) + * MultiServer can now disable forfeits if desired * 1.2.0.12u * Fix for mirror portal in inverted * Yet another fix for blocked door in Standard ER diff --git a/Rom.py b/Rom.py index 2fa2dee5..49ab7804 100644 --- a/Rom.py +++ b/Rom.py @@ -37,7 +37,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '15edc718abbbd94ee34e15ae24b219a3' +RANDOMIZERBASEHASH = '29863ca305a8474c452cd13b3f921898' class JsonRom(object): @@ -1608,6 +1608,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.name.extend([0] * (21 - len(rom.name))) rom.write_bytes(0x7FC0, rom.name) + rom.write_bytes(0x138010, bytearray(__version__, 'utf8')) + # set player names for p in range(1, min(world.players, 255) + 1): rom.write_bytes(0x195FFC + ((p - 1) * 32), hud_format_text(world.player_names[p][team])) diff --git a/data/base2current.bps b/data/base2current.bps index aa3b0b2195ea6804734645a963163a4ac524d11b..832779a30453f400fad4258196d067eb09eafe59 100644 GIT binary patch delta 2651 zcmW+#dstLu8b9xuE0+-lW`;o#4+m66@tPT8;b`r8EidbuspXW2u%o7}SLE`Y0|y-O zFqhBagBf*3;dmI793CvnG_>_bTf4JQ`m}3nn5B>5RiMTV+RTF7mVQHOUC@(X88E zw#qFJ+Pg(|d#jw^EVBRZ?%3t=4zd-Zyt2NP4U2LV99ic?_Ci3;Z}PMM2*`tjPy1Yx zF10hr%RX+92X_e~`{(AcofG@;4LAT}@EbHc^7ekY&?T}P-|YB%7km0znBD%FVa+GC z?e+$deG_-n&rEoIzbtjfwawcKzgv!60}Zm87uj4!prwIVww)~-i5d2X$s9#r#Q*0En6TvA6C9I(6GlW-a5XRB(JE2>np zDFw7nKGQbw(D(REGUsKT7^!{-`S_}8MU8}HkN&F279*Le^|NpNY6>i)2W11a{|8F;ep`_J3FKD<~$gYxba1OOVL!YLcIec-e22GXHda(;!!RyzKSn@L*Q0 zmz|p7t_09?SQ_21HZH||VWZJ5<0Uy#`HCS^4CrJl6JB>?80bxEZFi}8oa)iAMVzQIM) ziDJ*ylwLJWH}{C9GdAFR78EO~ZXBGo2y%Mv&Z-)rh|<-)8^P9-edVR1n!c@De`qTk za~|hU4t!x^zC+Ozi89S@RtyQT?h|B6G@J7M&}E(X(Yz`0(gC2VO;5feus52wnmkif6QI&ke8Bp}vy{n3@NGO-NO*4BOw6CRDgY{_2R*ZjKe$Pa(y#>uN1;RFCN*=m{FMyrPa5|S~XiOLd}#?+DND5?G1 zb5tDe_UY=#DGlV%nmY2S26ACJ`B4Lf8QlZZ&e6`U5_N3)!tX0^z3Y$r=`V9i$U-gT z4%<>EuQ4~$%~}T{Og5?1!aQSaQ@o8&ORNInIdvc3$LXoB?h>=&0FR*jz(%m zTQ5+|D6&8YMeqUZHjs+C-Q^9 zw6WS&j>bDMp1*-cu0Rz9taU=PT75%EPY|`$0_U$p`C6239&OiMR%f3sXMl`Z4EIQU`+OS@lLlhP<&r3 z>An-is-wQOG{UdHnuY}9b-947G{7X?%uz-ZO3Nlq24K=J;>}&Y7esIW5EV-Zm@9bv z1UYYj%H=CJ@5AM*1Ks@)*GT(pcIQbglF6>s0W$lPm+c7i&Y)&=Ah09h8_9W-QbpAv zDqbBdof7!l;nT@$tnV0<`x=PqZ7Kc3JoJ?-L3hwNj(CSblO`{(g{&iaDX_KVmM=^z z?3#%ChvL@2i%#D|g?<{Q)~h)CyiB5}&|!7_>U#8xYqPJf)Y8Z$xjV$UUdE0?en};S z>$HDb`tDh^4aE{9wEzlNkwH?2D(n4>%fpnA$0;x}dlm1%UmxG`&b1bgq*4gyU}TTP zFx?)Tonn3@Po+ZcGwG$i+ns0Q7i~jSheRqQ|69~F}wwv=FQF8MeWSZxKHfrM@3zM?~vSdB0S z?)A&|lu7osnhu~8W{@Ea68_#;J^tI<hi4IqAyVDhPkkWJ* zr<%%Og41C#txF&m(_y?Z(BeKy7Hvl7+b>t2og8NZ1Wd3bAvI08wK$N~WR(eKq%R{l zm6vo>Otokki5T-wW)CCBOfZW1&@WqS?)c@7K1W<`ea>>_O5}c?BHPv$#*gR~(%m+} zX!9_e2?d|8Jun?tt+Sxe zJTf~2md%Mtt3qukUMc8 z@F=R1C}#w~S#GBmT?}+uod>v;&Ffg<2o+m=@=;ul=a2#4^5y%3Rb(Ioo-w~s$4)=g z?A&=Gl(tEBB~ymriX9ioG%HM0&0Og1U2lb-bSX7^YA<|6 TJ0cGrF3@Xc=0Chs#n${E3=cYS delta 2633 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 From 6166151b331b56a48bf8120c6c096e1e66d63577 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 14 Mar 2023 17:50:55 -0500 Subject: [PATCH 12/24] Burning OWR Version to ROM --- Rom.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Rom.py b/Rom.py index bfe4d259..60d4eadc 100644 --- a/Rom.py +++ b/Rom.py @@ -1710,6 +1710,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): # set rom name # 21 bytes from Main import __version__ + from OverworldShuffle import __version__ as ORVersion seedstring = f'{world.seed:09}' if isinstance(world.seed, int) else world.seed # todo: change to DR when Enemizer is okay with DR rom.name = bytearray(f'ER{__version__.split("-")[0].replace(".","")[0:3]}_{team+1}_{player}_{seedstring}O\0', 'utf8')[:21] @@ -1717,6 +1718,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): rom.write_bytes(0x7FC0, rom.name) rom.write_bytes(0x138010, bytearray(__version__, 'utf8')) + rom.write_bytes(0x150010, bytearray(ORVersion, 'utf8')) # set player names for p in range(1, min(world.players, 255) + 1): From a14ca50a7148304a152fed7d665e0f42794f6308 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 15 Mar 2023 05:44:18 -0500 Subject: [PATCH 13/24] Adjusting Bonk Sprite landing position and water ripple --- Rom.py | 2 +- asm/owrando.asm | 17 ++++++++++------- data/base2current.bps | Bin 105834 -> 105866 bytes 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Rom.py b/Rom.py index 60d4eadc..5c1c2ced 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'baa1135c06e1e38d4005ba3c7acb977b' +RANDOMIZERBASEHASH = '8e95ee70d7afec407016449e86439550' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 7b51e697..614fffd0 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -436,7 +436,7 @@ OWBonkGoodBeeDrop: JMP .spawn_item + - .determine_type ; S = Collected, FlagBitmask, X (row + 2) + .determine_type ; S = Collected LDA.l OWBonkPrizeTable[42].loot ; A = item id CMP.b #$B0 : BNE + LDA.b #$79 : JMP .sprite_transform ; transform to bees @@ -480,13 +480,13 @@ OWBonkGoodBeeDrop: JSL.l OWBonkSpritePrep .mark_collected ; S = Collected - PLA : BNE .return + PLA : BNE + LDA.l RoomDataWRAM[$0120].high : ORA.b #$02 : STA.l RoomDataWRAM[$0120].high REP #$20 LDA.l TotalItemCounter : INC : STA.l TotalItemCounter SEP #$20 - BRA .return + + BRA .return ; spawn itemget item .spawn_item ; A = item id ; Y = bonk sprite slot ; S = Collected @@ -498,15 +498,18 @@ OWBonkGoodBeeDrop: 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 + ; affects the rate the item moves in the Y/X direction - LDA.b #$00 : STA.w $0D40,Y + STZ.w $0D40,X LDA.b #$0A : STA.w $0D50,Y - LDA.b #$20 : STA.w $0F80,Y ; amount of force (gives height to the arch) + 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 ; sets OW event bitmask flag, uses free RAM LDA.l OWBonkPrizeTable[42].flag : STA.w $0ED0,Y @@ -625,7 +628,7 @@ OWBonkDrops: LDA.b #$00 : STA.w $0D40,Y LDA.b #$0A : STA.w $0D50,Y - LDA.b #$20 : STA.w $0F80,Y ; amount of force (gives height to the arch) + 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 diff --git a/data/base2current.bps b/data/base2current.bps index 6c525c078e1b9a39e6135af37015e0a77dc69c9c..9ddd927b64f3e3b5fba5e9fdd002f1b1f72f4d04 100644 GIT binary patch delta 8862 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 delta 8802 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 From 7b939a91669984b5169abac2a632f71d9a1daccd Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 15 Mar 2023 21:04:27 -0500 Subject: [PATCH 14/24] Fix ... issue in credits --- Text.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Text.py b/Text.py index 5d023818..3df1e679 100644 --- a/Text.py +++ b/Text.py @@ -1309,6 +1309,7 @@ class GoldCreditMapper(CharTextMapper): class GreenCreditMapper(CharTextMapper): char_map = {' ': 0x9F, + '.': 0x52, 'ยท': 0x52} alpha_offset = -0x29 alpha_lower_offset = -0x29 From 61846c0f816a19f313828f739971980f73615c69 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 16 Mar 2023 06:31:05 -0500 Subject: [PATCH 15/24] Load correct Link/Bunny palette on transition --- Rom.py | 2 +- asm/owrando.asm | 32 ++++++++++++++++++++++---------- data/base2current.bps | Bin 105866 -> 105904 bytes 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Rom.py b/Rom.py index 5c1c2ced..6bdff514 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '8e95ee70d7afec407016449e86439550' +RANDOMIZERBASEHASH = '8862307c3bdf3ae838f7e07b5df6596b' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 614fffd0..25eb1fc9 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -985,17 +985,17 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, lda #$38 : sta $012f ; play sfx - #$3b is an alternative ; toggle bunny mode - lda MoonPearlEquipment : bne .nobunny - lda.l InvertedMode : bne .inverted + lda MoonPearlEquipment : beq + : jmp .nobunny + + lda.l InvertedMode : bne .inverted lda CurrentWorld : bra + .inverted lda CurrentWorld : eor #$40 + and #$40 : beq .nobunny - LDA.w $0703 : BEQ + ; check if forced transition - CPY.b #$03 : BEQ .end_forced_whirlpool - LDA.b #$17 : STA.b $5D - LDA.b #$01 : STA.w $02E0 : STA.b $56 - LDA.w $0703 : BRA .end_forced_edge + CPY.b #$03 : BEQ ++ + LDA.b #$17 : STA.b $5D + LDA.b #$01 : STA.w $02E0 : STA.b $56 + LDA.w $0703 : JSR OWLoadGearPalettes : BRA .end_forced_edge + ++ JSR OWLoadGearPalettes : BRA .end_forced_whirlpool + CPY.b #$01 : BEQ .auto ; check if going from land to water CPY.b #$02 : BEQ .to_bunny_reset_swim ; bunny state if swimming to land @@ -1014,8 +1014,8 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, STZ.b $5D PLX BRA .to_pseudo_bunny - .whirlpool - PLX : RTS + .whirlpool + PLX : JMP OWLoadGearPalettes .to_bunny_reset_swim LDA.b $5D : CMP.b #$04 : BNE .to_bunny ; check if swimming JSL Link_ResetSwimmingState @@ -1024,7 +1024,7 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, LDA.b #$17 : STA.b $5D .to_pseudo_bunny LDA.b #$01 : STA.w $02E0 : STA.b $56 - RTS + JMP OWLoadGearPalettes .nobunny lda $5d : cmp #$17 : bne + ; retain current state unless bunny @@ -1073,6 +1073,18 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, .return RTS } +OWLoadGearPalettes: +{ + PHX : PHY : LDA $00 : PHA + LDA.w $02E0 : BEQ + + JSL LoadGearPalettes_bunny + BRA .return + + + JSL LoadGearPalettes_link + .return + PLA : STA $00 : PLY : PLX + RTS +} OWAdjustExitPosition: { LDA.w $06FC : CMP.b #$60 : BEQ .stone_bridge diff --git a/data/base2current.bps b/data/base2current.bps index 9ddd927b64f3e3b5fba5e9fdd002f1b1f72f4d04..80b9ff4c47ccae58a2488fd7c379e255ff6ee04e 100644 GIT binary patch delta 361 zcmeC$&9(uEQW;s2g6FQ;oXJ?j%%nJN@^cmq#>i#?*6jkUj8p9DyQlV_`doLC;RDl3 z#`9hc1{b*IThD83Sj^loaivACKI8OEVeW>FK6O*qgCyD30~Jr#5#esw>FJ>9@S$ie zGy4ab1I!Sbm> zFij(;ow31{S$CZT%YL(tRjr;WvA-HbfBCRa11o1&(wf0O$CY_?PSLXI3=N&)7no*C zmQJ^JVKfU?Dp|HRCH4U01#6Jf52lk(PFCgPY&gpYJ*=>dV`zzdQO&Fl9sbnm=qG wSkC@o%f4TBkV*cGTOMD-{M^*(jINB*%)A-h+vQyulOs4dzP~J6=jL=60RE1Ung9R* delta 344 zcmdn6o2_d%+lEv|7L}yib2n!))-W^um^%46iw2`XvjFRM0anH-cJ(z=`%itYJIU~Y zX(i)%uLgq)T=T8xH8w0}ZrHohqF0}Befa0P3pMLOGLtV&@7?L?py}`-Z7nnV2ayBJ zA1YS!Ixk~v0CF3W4={e7WnXKCz7mJ7zWRx&P&eZX>oQL2}j{lGMhoc5ot%M?uJ{Lzl`O5Xa~zlxZh4Y87Pzz zJN>2$qrRP|lW@b)XM!mkve*1!`@nMc4_o&AvV%;{XWjDn8s^)lHD9kR5^h+Xr#){r nzhU3}1d& Date: Sat, 18 Mar 2023 05:47:49 -0500 Subject: [PATCH 16/24] Correcting OW screen palette on transition --- Rom.py | 2 +- asm/owrando.asm | 42 +++++++++++++++++++++++++++++++++++++++++- data/base2current.bps | Bin 105904 -> 105983 bytes 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/Rom.py b/Rom.py index 6bdff514..8a5bf3b8 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '8862307c3bdf3ae838f7e07b5df6596b' +RANDOMIZERBASEHASH = '155051ece07ef1b60c875a5746189c26' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 25eb1fc9..8818a35e 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -47,6 +47,9 @@ Overworld_LoadSpecialOverworld_RoomId: org $04E8B4 Overworld_LoadSpecialOverworld: +org $02A9DA +JSL OWSkipMosiac + org $07982A Link_ResetSwimmingState: @@ -945,7 +948,20 @@ OWNewDestination: ; crossed OW shuffle and terrain ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate - lda $05 : sta $8a + lda $8a : JSR OWDetermineScreensPaletteSet : STX $04 + lda $05 : sta $8a : JSR OWDetermineScreensPaletteSet + + ;PLA : AND.b #$3F : BEQ .leaving_woods + ;LDA $8A : AND.b #$3F : BEQ .entering_woods + CPX $04 : BEQ .skip_palette ; check if next screen's palette is different + LDA $00 : PHA + JSL OverworldLoadScreensPaletteSet_long ; loading correct OW palette + PLA : STA $00 + ;.leaving_woods + ;.entering_woods + .skip_palette + lda $8a + rep #$30 : rts } OWLoadSpecialArea: @@ -1085,6 +1101,30 @@ OWLoadGearPalettes: PLA : STA $00 : PLY : PLX RTS } +OWDetermineScreensPaletteSet: ; A = OWID to check +{ + LDX.b #$02 + PHA : AND.b #$3F + CMP.b #$03 : BEQ .death_mountain + CMP.b #$05 : BEQ .death_mountain + CMP.b #$07 : BEQ .death_mountain + LDX.b #$00 + .death_mountain + PLA : PHX : TAX : LDA.l OWTileWorldAssoc,x : BEQ + + PLX : INX : RTS + + PLX : RTS +} +OWSkipMosiac: +{ + LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla + PLA : PLA : PEA $A9F2 + RTL + .vanilla + LDA.b $8A : AND.b #$3F : BNE + ; what we wrote over, kinda + PLA : PLA : PEA $A9E3 + + + RTL +} OWAdjustExitPosition: { LDA.w $06FC : CMP.b #$60 : BEQ .stone_bridge diff --git a/data/base2current.bps b/data/base2current.bps index 80b9ff4c47ccae58a2488fd7c379e255ff6ee04e..f789ffebafedccb4a6aa51508e7aa5e7b26b5775 100644 GIT binary patch delta 2576 zcmW+#YgAKL7S7I#@P37NfWzfs!o!MHK}1Xi1zRX}YCDWd8|w>=THCS|1>q!cfq;R8 zOE`I;;dQ+R#u_HIX-6&8wo0b8r8BFmt2(u=5j#pdZQ7}A$FYmK%%8izZ|{B1zGv_K zxi3l=E=t|Ip(RN9;BycN1>Oa(Tj#aEA~{nzsk78uhPSgej=E^$G!g08LQVH@7?=^o zT{ETc<>u9sM#^F1lmkZUhsm=ICi6UX%*fTW+bE}zbAv`PZKUSyoU+G4E!esF`Qko9 z)|X=lo2mbHaPtkck^00sq}Caym^tW&Oy-!7f;nc8|9Y4y;o7`ICpmV~FCC~a{C*2I z-0I-OdLu;{IW^5vN_y<}f?tLe11;)n8G3_@QHc~WqdnZNRwGsO&oLP$A?2+yy_tHE z*(%b*66Q(Kn`5n`%g zU|i5@rt5a)D>taUFVk!NzsLl ziJNLX{C;npyM`XZTYCE(jSZ2QX;xbqVZpB!#Sow*{it52AbMR5=}drBxJ1q-z+vg7 z_8|ef;7v({TL3G`Z%Gg*IkjEzo1P>ppe}MXeHJ44sR?z7t@QxFP_H3-2EgXwd0)pTM8t3-Bv^ z;E(r--SIx*tdx1B+YsgxkrLzEv*Ihu;x$*66>3mQyGcdj$i-yHmQxv4-O*mXt!eSP z4j{|1vzGiP8J57)BrOHxD;hiaAL#2aMUp-yv-yq)7dGGVv0`6?z%6mL2ymFMVex1S zb4aHP7>#@^5<5c3z7#kKYst?kkPaavF%{B7Lb@0+W(u0E2Gl?{r9x5QabXgEz&EI# zoJ@se2qfdF@Km1oNEE&+kKawv)U5F9^sYtpEI*M5I)Kl$_X56vcnHYejW!bs!JAM` zzCcj2N@1oc*H1W@pJfdXucoxalI zq$&-T$CcUN4&#f6XT`4D7`bM!V(LZKv6T#@L1xI&K^rS9yzBCZILgSiG{}P8?%|Aom?J#TMRgpvBgp_HK{(8*%#z zxPz~tt|!N*1V3^!+AC&SgFbB@{2_M5|--2K^&>nMK&*T$*Iy5Ce^Kutc{jA-{ zZ$z*&r_H8X(4LoKjx^NR$vSUR2H*6St9?U4e(9qa--18her%ihKhq0-3EFGsoug*- zU2mZ#Uh{v~twq=G`le!2V)6CwO+3jlqYTqxoE6bSZPNEnymeWu!n1*_myJGA6*7NkqpQ*oHCA+{`_ zpr2gI;)nc+_f8h1K=2fU<eN?iA+l; z)MniZ^7{yb&P4X;NRvTVII15my4H*fsD#cDhfHj6REHZJMI=ZCi4aFJRj?lv#H51c zq}t8hY}C~4pPJExwReORJ*j(l>{|2XWqve4W>ioulWpsu{Xp_aYBsEn+DVuQJsTjH z6;&H&AV6MecC)1Ys`on z9Ztu61}R!gp2^|gp(5HGNJ(%K)7l3x3T2T3oeLP;tQRoQouhpk$hVK zXW%$t3SoWtvGh)JU6FQZ=zR5SCP$Qat`H&s!o3ex!wLWy$zH=N_(M{$Xm*f2Yrq2K zSH zH1env3KVGrY^_f`8$e}S0|qyUCeUkVhyWYnW`&L_Qe6fGOP{Ylb8c7dG|aA9%=E8h ze9Rxh0`c`Qp2qoQE-_s@s1|8%BpO8lqfe7J$^bpSBXP{A84*^zQ?-uJbvKxzPMcr! z@Sf(OX0)(z)F!Q~`{_rQmWY~?@g~fZJ3P5j21|=`s|-CGdM{}I_(C& delta 2573 zcmW+$3sh4_8qS{=l=maVpb1;XKk(4N>^!Z)7`pl-JWHyduGne|M%P?Dpuuh^*8ffRM>sfm9KL)}PiCSGBZno0~ zyj5ZbExs*TC_ZY&YU$gWx^}+IYp1_!;HN&fJZj=k+Ah#vbbF@Wij&f5_>ojiU1{J) zSh@=H^Gz(hrEBN`Gc}dbY^i1j_BJwqZwcZ|*=$&aH_1xHN85Zvb_hV~iwau%d7g$)L@4*pZ9_ zDrl!l>XC$cv7Q5+{yD0esR_wEa_XI?;m`D_?<(1w3~8AfVm58T<_VPmk_05daB8c$ zcb^m`U?p;;qBHD1DK$oZn+&hZ#~M8%>K(s!CVT-Y3)lU495-4Hwu!$=t4=_ySH{Hm zFWQ0n=zqR%Hj;ET)WnxE$5Aq#X}F+NsAxu6&WaZV?Y$j2!w^y0SKuA(h*fa9F*gO zt(KU8gy`8zLFtu3mElTZv4Ki$wCPAP`9K3Xij0hI(-EuLdGhITO+e-%cNGz*Kz8=} zym(}abem1FR^S*WoywD(68Db#d} zAbyzU{fVK@9^TV!663=duh}g|mU2z2tGrx{*zy*g9G7{>LGn@>%$>2S=TeLifHWxe z-bIx6I#Q3n%(=D`cN%0y9qV;+;^IkfD9W{p1k)f3c9WmdpeRW>@Pi_7%%&`Uc$ATL zN2vBlhp2gE1r4-3X}~0LRTCo(b72R0lZM4mNIs(>DX~AyfPDqJISVOj@LrOyJg${86vInL`!Do7sj+^m3 z(wYt@H5>M~;L43XtWfbtcW#4IH*LHqM?5*cxrZ$CXJmi|p1;=N5erS8hy&9hRnM_) z_Fpbfhh$WZT`&&Vsqd}D29@FeraMnf8#~5TDN1xBWD}G;JC$jB>gObkr$PSyY0{nv zGfvmq1g^N3jQZxidq%25K@}%ua9lqVig1_oIgm6V~qx?&Bjqw zmrbV^QFm=vjZC!AQxrCjT`A{^f@?ns!wVc8v(&aZ=--X>|wp#G@ooCKWHI2BSLC%RmNIe zi(@UM(^-724kdbJc*5HDbg+Z7g0ltE&ep+ekV2d~(9Ei;Y~>Qh@BUavo$t2xlhU=O ziGgc%V}&8=Jo!Wi72y%vnwSuf0;0`QBYD|O}z2ii^>DeOWrsw8=+(s zN;XBw-d9@PGL$i+Uo7&9M5@!DJ9yRUpB?Q`gQj!Cb!JwZn)tg z+T%}*x5ig@^F!2;Zb58Wi}TEQBN@&G9lT6#=E9PA5%gG;T7xxUr>(aKZV7bH$b(#H zCF}E`I#TW$iKH&}j4Y-m$ao%TODB3pUUw^ZDiQO6!kxcQiJWq(&U;ni?%4V+r*}&Q z<$=O&CK-au(I99)D~2ltxLZlm@`1|VDadCU)9SqW=LA&BE+t|c(&~(4#imxrGh9R< zPDBcpvn=NcEc8oBZ9b&u$X!oHB%H|T1u*W>i^{+48B!TLO`E%R(oCNySaI=5h!3Ta zJNOiNFCUgkUaEh=Kb;RN!edXLsQ=LBtYLd2jWxaeDu3ldhz2MiRYjnM?WDN~mJ8dT zi-c^b$m1dygp;JV7?#JLNN={+lo~yrixmfLE`|S5F~kAH`~O=4^C2~Y`VUV4iHuxa zKp_fA>2=LRMtbj*c(BDIp+-sNBH=&TN%k)S2dpHr#ZU~J{7V+Ys}g7?+*0@pjFLlo zC=?>$^umE9{#$xDB!(nXu>w+Lqn(_LA#E!lCt|N&CyD(uMn76 zN4^)_@~|$nmkJ}PWl*FJ>*96C2)Q?ux#vu2;UG<+HJCKNmYjfXp#m;GW8x%cc`|5U=VvhGu(KW69&Xurpb9neq M4-db!YWe&B1CZ_kCIA2c From 504f2e6a3abbaa30803c2fa12db887aa05771710 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 19 Mar 2023 11:01:22 -0500 Subject: [PATCH 17/24] Fixed issue with MW Player ID on Bonk Locations --- Rom.py | 2 +- asm/owrando.asm | 11 +++-------- data/base2current.bps | Bin 105983 -> 105928 bytes 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Rom.py b/Rom.py index 8a5bf3b8..87860b0c 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '155051ece07ef1b60c875a5746189c26' +RANDOMIZERBASEHASH = '109fde24581211c605a1d4836dd8d470' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 8818a35e..4730478d 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -494,9 +494,7 @@ 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.l OWBonkPrizeTable[42].mw_player : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID - - LDA.b #$01 : STA !REDRAW + + LDA.b #$01 : STA !REDRAW LDA.b #$EB : STA.l $7FFE00 JSL Sprite_SpawnDynamically+15 ; +15 to skip finding a new slot, use existing sprite @@ -618,9 +616,7 @@ 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 : INX - LDA.w OWBonkPrizeData,X : STA.l !MULTIWORLD_SPRITEITEM_PLAYER_ID - DEX + + LDA 2,S : TAX : INX LDA.b #$01 : STA !REDRAW @@ -948,12 +944,11 @@ OWNewDestination: ; crossed OW shuffle and terrain ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate - lda $8a : JSR OWDetermineScreensPaletteSet : STX $04 lda $05 : sta $8a : JSR OWDetermineScreensPaletteSet ;PLA : AND.b #$3F : BEQ .leaving_woods ;LDA $8A : AND.b #$3F : BEQ .entering_woods - CPX $04 : BEQ .skip_palette ; check if next screen's palette is different + CPX.w $0AB3 : BEQ .skip_palette ; check if next screen's palette is different LDA $00 : PHA JSL OverworldLoadScreensPaletteSet_long ; loading correct OW palette PLA : STA $00 diff --git a/data/base2current.bps b/data/base2current.bps index f789ffebafedccb4a6aa51508e7aa5e7b26b5775..13b9ab4e536d50ae220897ada064df65d5f345af 100644 GIT binary patch delta 10112 zcmXAP30xD$`~J=*gb)dbT#+*_sDNAw2;v0-ihv3psECS+ipB#FTSbK3XpjIQgfWZ| zF^eH$KpK&@Xw^bh)M%Aht3Qhe9$zhDZLuD;)arleKc5f#JTvp|%sbaR@4UH+%)_o^E2*Uek-z>ZN+=C4_wYBiPd zJ4*}W4ydW`pn?|~Zt)0rDZ3PIA6M=pQ&TR($wIni=BRQ$t)_a0J6spKn^wGjzz&$@ za~`s1Rn%AT9d8x*0WP)_M@WvdpLCI_3P-7e`uYZYLP53OV3*=U_XvhG`WUSjP})JyqPo z4w9Jz0Wt-}dBTR#vcIk=A0;qPu0Ul{={NqdGi4N*(p^S%wsk)pH@4+E%F0q(LQ-=3;VOu>zQm|pphwG%E(iW zvs|gn@2{K#wbVX2e(gl^UU|l~rx2L=Qu&(}HeW9fKhCCTDSniP@|E9HMb zX*?)D*~xavGwNBfRzanj+3Xtm|9aSbDO_w7BWk_JrU>ym{QawA0|D3Ys6JsgW3^l0 zS5|JK(@)uf=>00{wMfvW|hfE4Z)j2(CV z5o?FXB&3g}IazcqRr{D7HqNN%aN)nyH|J>9@m8V;VDdmd#pXcR;aP|0ViRX^Ux2aCKmLs6N6a{3u=b_!iK)WHtm9{2x$us+2OOr@F3 zkO~!LKFwzCEbH;9ETrXhZ4u1S8TJvB`5x|e^7G#^N>!96mi|#eIn*>+%Vbn7n(!4f zV7*so*YUNAN`W7oCW3cxyt5eGfyvHyMbtBPc%pW^Zp0cXD4a~e){c4xr@Aa5Cq9E} zmrllHq5{*Yf?9P1%epLxOD$-u*`(u_xpekJubMQhj(|!L7^g7UEei95zKcctVz= zNG6A_o|*f2=^=T{O?D@(+^OUrlH)}c-6WrIlO-yKcf^S3Y~P*#CvP>gJ~U%{NVnYU zq3R`N)5qo?W+tFm2Wi~CVc`@PT0RYGqQk~A;c($kQ%%fdG|GHj8MTAXV&LI887!ar zSdlULx@U%5krDm~zKaeTKkaumS*plT${Vd^j0mlt{~(T54-8O8QCZ>9h$q&<5Olvu&fi&%g0B&cl?)F%X25;I!D#2JV?==^vzt zLztaV%@3Bw`MCT(X`F)LHfbuhIFre=39!ufq%j5Ob&wZyZFV@#l166?wd94mHg`;< zq>;j~n?!YLUre@}d_!8hMH(}BTaFscj+!`idU~(D!*S%D%*cqUF-ac`^x)5hK;_@~rCI^9W z8ZJ`-6kDP$#Thbym8ryJD=;3wumLFRl=BXD6XXd?;{q(Y2pFegmGe&BxkI4_cAT`q%MvSD2PqZ)r`Kc7%z&uG)1Q|Ol zxa(xYF=P7E5IWlA*%a5#*gp-XJ2-7HZRtXwhRsV|K`-oHN+qaUP5+oJso826iS6CL zW>@G&E9{NS-yqAH>BDEgraDp;D?$bD_1VF0gRf%wp>i z^qcYCxKKCMmDW_qdyUzsS$6w`ZXedjPdCSPc!sjvXj!ij=HPP-{aU_+R`x4MiGiHg%pNT(yoO(h z97Sv9?PDDI(3jR)%5n9&eTrVAgh2Cmz|{2At-LK~J0m8So)0T7`9~a8%AtRlLU*YW zda*n4X7qTPanVXmBaDa+p>DUa$xSDd51cfuG>bZ>y3;Ky74lVhI2ZcT3JxxUxNA(B zQmS!PC`_4VC*2fZY|4%5rlr0#vqrN=*?j=oE%yd3Fl>1+86O1KE%&u^YNyn#Xq8_t z+_e0jGCTygk_707-PF)*m=!{s zyo~?%wrJ4Wc=v4)b?YQ+AZVdc%49Z`$P5xF{Jnc7w!^|^mL#xoQsM;7t6A%zx}Gf& ztG+(reO|18k`VdAmXJNs_amE4Z|eJ>h;hkzu{LQb?8*3!Tsaw*uZSQgJb)KhOb8;u z2Sx%P%N>nrkP}JQ0wox(Qe!ijZb;CVDG#O;XG>0o$Mj&S4R4_L$|yVfTh{zP3C%Fb zdqbCoS_QYPjP(ePr4@o~V|mS(m`a%>8y3XV&~_GG=U%GJi-*@&DoLj~aOEmDPy`EB z%_jXQcwtop8F31JT;=6k;Ma|(YTaq&dkfkR5Q9DjJ72{07HEPPYs_nG(} z3&&=Twv?P26rROgl1aJAP9aOqKdt;hE5le{EKtvLL2Jl=)4v%Ge4A*}-Ghp)h z@7Vf*k)3xi_&anCVA$l)`3Xa_L+8jdxXht*ECzqa&L|9<96RS>Xm;#e0|Qp;g5o!r zOR?op!SuqCT#;!)jiQ1Myg;sFy3U$j5k$|WrFEZ3Gm<5i#qM!3zK);b$cYQVsSf1WSw5u8Rtr=rm)2UG~gjT8v6n%h^F3@4^1ad_@oV7N= z2j5zZsVT*#&t?m1^g9d55hCerPv_fl?=mLiRBt*TtqFxE*Di^g?fmgH%{~zuJ}a?& zvh0T^;u`zuWfszdJ)2UBu_o(&=me$^T+x4&FopD_;HAe&UIt^cW|CnO;Qp+<;(vc& zo5fb=3x-f}^52?*#J?Mole_dReoLqeo$&8#)6}Xr23kRk7WC(iE2%9C7_t zW+2JV&i1cy+S8}XcwNqu=vGI(It>V-Otg`a5M;uC){O!*bXvb^di{m6LF=Tq_bw<8*2cZJ zkYK|DC+$DS6L(w@r(J5n4v=|7(%X-4UWo#Ju#o6lTTfiTGSshcJ;jqR!jtR$i(g$d zk$CJTcAGdDE_R!^W{_D!CAO*U2CdIszX;b>s~_1_y*>A!De(X^r2GSonSQIEns$jlu5=j>_F4Ducfd{o!IvXhyZR9YrNtc@TF|(R%n1zgxK@Q}# zrjg_|9hXsBFtT*M#v-MpZFv4BKf650nO;DL7id-&KZv0N#AR2+FD_Hh_wuSZ;^r&j z%q#zK$JSobY^#6oM-N)*?M&7uIN}qRuHYX^i-Mx;iScO0^0NBAg?KK-C&WknrD{bG zNWOnrTja7&8@EWNxz51q#$7K_c-1$97B3@T zP%mHleNy^$72V=%w6=Fmr?Xm-{%Z$1@{pzf%3$CVJT?rpa4 z{6!gAk9HhlMq;-m{J3TdHrxpstG)Vc$yw~*!{e+3adKb4==>LQamJ6zQn@(xN0c5x zYlKs1)01l~ZHY6ebL}iXdvN(d7(IncV$ffYn z7H_8=KPtZ|UrWpX`0_{P8v5KN9yUaOLD5#fME1sTtODM^TIlRM%KMoFxc+V%P=?|a z5SCI*ow>mt9m(laWY^L*w>Ip0UTu+YZY!?Mv6Uq7skk1t%IoNqg;FRGKZj*o$2duP zXggB~VIBcT9%HJYz>!ui@q`z*jw4A5zS=s991{Wg+vfZHo1A1ekoB}ME7$-O|0A;% z{qBcP*oX=w*g83x7xQaYSiypA?xedHJh&}Ru(((zA7PZBiMjCkHeXN;ZFAynB9_w3 zAWU0K8w|EoHC&T3#^w1?(hFA@?q^GFQV#}@6hG(_V92{#KcU8N7^ZpK1Nc# zq2zjkk)lJ)T#EM-YxMq)jr~beBzo8ogKa4;GJz)U0%(~V=Df|W=X6Y;P$V(pNR*XW ziJv;IJxt9V3+}?5xneSY1+2>*Lk6vYKjbd4>b-?$R)jXphNJUbNx~aW%L^bU+=h}o zw_zyFn;Nq!7{@r^l3MkI+g(v+VaKE-Mn1*t(X=s%=?O?;m{`=x44!$;EY(=h=%P}H zZ*j@lzi4UlG!pN( zWcNEJTa9z{bH)yz0`3|uW2LEX@B(Im-e3YG+y`T$`xItNy+NB14dvV2d>fW@6`6+L z+>B<@zihtqMBHl4HIuHcrq6@pdOrUVVz%s>2#aWVZTl$D1)pu7>1##n$u2zKM}T@ZGw9fbqWwyYr?&$6E#)MS< ztn$G%mBIRkF=hefRKto7z^{}GOY5-~<8aAUSe#MH`0A<{Kb;k=^2ap?=|<4Z1YHiT znurCyhTo||F+PH24G~qsuBa1M;#jRE(-4J4r=H-6ogl$5Q*|$yX*vQF}1_yJKF`L_~*-AIetrGCMQn377xO2y}k+HjIgKIO^ zet3{po3;4`@bZpToK+KAq2Cu_U^86##cogrd%sv<>(-m8d@UDkv{N2v%M=g7DPLY2 zF=yIU1xc7~P`)d)-5Pg^aw33re(CPCe4oi#_}8%-Pq1b3`BjGP!n%U!`U98c1avvbTbx3mnOGdl*q54qNN|vQ}cSQ3L}CS~T)y zF5UW(gJUg8|9T|<)YrP4gQLeB%+mST!*~*+cN^p+_rUT3@zh&=?DG;u@$EjAqDw63 z7T*HNpdI1xc0>2MmDZ+2Gtc0VVM+51wiz}wAEyPH8A%W1K|pe3$|Cq{!7Qu1==;wu zJod=A1t;weamE9Y083Ohl<#pCzG}edCv8oYz{1@g$&0tpaQ#I3(&9Kq-nr-TAM<{Y z6+gD6_Z^-xxlcJCM+?i&2;ou&a+bepu)+rMfo;YLBXTT$q{vulnD ze;xy$?e+(S(5}$QpE%BHI1d>od;+DF)#FV%@>qg#WmDYIwv75(OXE-fSSWYDDUxV5 zkZ^ustf1$KiCYDtB;p=;sBkkGPzVKkc7vU;WKSgi0MofAhIDxb$)Xr1uV?Ia4#zxI z6EXRND$Kx7XhB~@z@q01vu++@i<$*z4ZgXVcQXDc)grn zB!&MLKN3i0e30X>3L5J$_$$4H+?E5Q8Amct1k;!~r2TT(z)S?+!JnCU&oxVF6?Wjw zc83=PzHp*R;zXi&_a71yUg9z0-7rGxNxBrkB~mX^oDFwMXF4ul^p`53xiea-8TC=V zdoW6q#TkG-(iLRFJQ%ch9T{r@)q5wBq8ZS%*Ml6l3ij{KahJYkGyZtZ8f=unmoRYu zdkTl2n#gpRzi%4p@dmc<3k(r%`P`Nuz`w|+U@yqd0%+zI$Z*iO7|0}O!e)F{WpPC7 z$aZJCp3S62zkzl#clX_4ce@XYwm8o`?lQ9qTzPq3EJ^51zr~+$SGF7`$Tk!odn?fs z;%Dz9ozWMHsFqKpcGt{zaMR-Vn(d3Xa_v-EN>OS_?IEVr`_teV4?jqx#8XHFSXEzKgDaU@?cO`)~ zYZt#)9Hckts|i{gwG6&1Ngv^q`$Um(e8^IhlLOQDPa(&zf@r_z`f-0ZA2uF>GbQhj zG#Y~??`7lut~)GyBG$~xelHvOP4(WE_&tm|Q%^Jzo$ZB$RCYc@6TaoWY}enKqr;D5 z%r2BKd4D)Z*4p1+YWF777)pl>S{+`HXTV$bv*IdO(lp~8^ehdvTvqsL`&Y?(;L_4V z&I<=l$E6fUB|H&J^bYvelOaxGW(c7`9x7O6j0=4lA*9!Iw9l4rwXu(xyHAf}tNr*Y z@aBjenl%?*LK0wv6Av!7b-`cV9M6l5h3z)`PSFRLy6T7N~fk*J9bk;*NIm&j!etm+c`$F0qOn%?!OoW2>9*Aw`A-dc)VLgt`2~gy8jXW zX~Dk}MUPshjHNjY?75Uf`b>r~mwiS#eN<*BjFZAEt236$;O-;^b5$v%QBX20x;&MP z2!dxXr;=;3q3xB|)EA4G7d>`^Ay33rdRjlorIz*ZjVrO2LzuZ47jB@!R7jbodaTGV zuUkH;u6~erF2u$}N}Aj<_Nzq_W%rvR%}%)66llSmVl}&9t7$uU+CKWKAMn{&P!87= zlw-H?jGCKmz}HH&cz(Iwgzvf*25^Lspm?YDt=H}V-s((+CS^5Dye<~ZnOsrnI*rz5 zOosW_4b<%53KiZ$l7v6jjbmiSRV^V-80KkaI5Cii2X)OnIOB$!a1F`S1oO81(PGe`Nqn3SSC%y;i z3C0Svb8UOkO+5fFpwF$t&Kq(owCi&#RQ?XGiU3pwR|QmPg96~)TNlas>*3*_-;vgv z+ts)ABsn4nPQB|rCW!-RwMDGKPQgRmCPg;h4}Wko30g_cq*ZqKT0BCx%>(YcD;~MY z?Ni+vpEl-3jZ|S{Z@hZs^y{gp?fs!TZIB|d_RW;OhiTM8%SDB#k0WpM4hvf501-^aIol$N7lOxn3Q z3YmdMu6uQ!o7)%Mn+C#c(<_dKPisP)1V*LA``mwM=kD9p<99uUlJV~u$&si$gc9;U zG;r`T(U+NGB~6)&;D!591KZd(Cbj7oyxQlhfxGZ>xISCEu^vn*GC>s_IRbW zURR-tkns&qzaJ@-q8tHO3U+ju1Yj12+!KxLZGbx&71I%H19B|L+$pHR0cUunpiT#H zW6XjO8jTO9wI}s>&;9haNQrL^+C*!*;gLIW!n)JkH&HV^3Y~NWtE>a9RE#fLlS;!y zQ#(AIfP?uZ->S~*_SvLVJ11@I0ciN!%#6|ZL9$$H6ov55j^ zYwebe9o#WsDp!;;)$~JVAa>-k18MC3ik0N$qD*MPK}-F>UUIPnJ@5k}(ryR(%MW-s zg`8rI@pOpaXEV_7m+zMi0u&yK{QNYme`$6UW*L&zDD<4 zlAXrDvia~b*fj4J0@uK5nAZP~;Xi8wM zUT9-W5cY(Fqmy~+doZrxwA;5!^6mqTug@8Z~C`8?%U@RG**zqb9Tm#ON$XwM^jf}w0Z|Lx=F z5>4!+jvL`%5(#>dMI=~3hD||Pkstz)=ujjGBJsBPF%r1*mgH4wTwT!bkzlF?a+uUO z8U;@Vaf0!!c^vcT8j(tHk?3V85`KLGRW3r$g6$C)YMCIIu0Vj7rE%~LdIn_Y}C ze->GhO8jgWM>8sV)zF}24d)QE7;R?J`)Rn%!T>aGI+!h-C9kLN_Maop^d=x%w0k=6 z5dT_nHCuB;cCkXYulq`cDGXl)ei0>KtT2UR)(b<>sp+`O5omBa7@wM`7#c*m`6OMN zoT$)|&HbH)IDzJe8+#Un8%+fMo}684wi&|Fsndio@?YZ2tz+j}aQwAJQY*GOLy1l) z25p-+{iXO^yL7}_Xf+Gv&j2CbhYmzaH2k?b)1XV4A4w!CxR#yl>1H`i3<}U!7L54N z0d#2whz8-vG8#+{%iX1`9kl5@ak{w&dT*rFWpkn>WfEP+dc6ldDxD=-MchQQ#c{4B zZQ07TG?OeT?(WEs2Ajz-PQu1_30)-7N?4xo^cy4+^jv{o4uRd@=Ik;Y_iD~Y>06OS zESLkVb+L(x=Ebu3!K%ZlQE6=Tl-Yj-QUU9%H90kvR3g~#wS0Zlbq|#>DoU9c?w9`Se8Y1UR7TAS3dBOW{)ZFMOxvg6B#D~d`{#s=UzZ_Y|4wq!zj ziy}3Pu&iFDV-{-i=C($BKgO9U{x(T_IMDrGjhky#oxFP1x}zE=CqKHyZh7T}Nx5$H z;h>Qhbyj(|7~wUk%-+5xFnXY)djsgSciog!FC!_E-ZuMO?F4&!d*B^<#MSAXcJrE! j!@GcrXSK}rV$HV0aLw|LNE&o{@DtzXI-i+xCI0^b{hWb% delta 10247 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 From b549860fb8e2b1d82d85bd1e5e196e493cb63188 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Sun, 19 Mar 2023 12:21:43 -0500 Subject: [PATCH 18/24] Fixed issue with no Woods mosiac on exit in vanilla OW --- Rom.py | 2 +- asm/owrando.asm | 5 +++-- data/base2current.bps | Bin 105928 -> 105930 bytes 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Rom.py b/Rom.py index 87860b0c..9760d525 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '109fde24581211c605a1d4836dd8d470' +RANDOMIZERBASEHASH = '281fb186ab9e30f98e9705398653a754' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 4730478d..6bafb688 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -1111,11 +1111,12 @@ OWDetermineScreensPaletteSet: ; A = OWID to check } OWSkipMosiac: { + PHA LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla - PLA : PLA : PEA $A9F2 + PLA : PLA : PLA : PEA $A9F2 RTL .vanilla - LDA.b $8A : AND.b #$3F : BNE + ; what we wrote over, kinda + PLA : AND.b #$3F : BNE + ; what we wrote over, kinda PLA : PLA : PEA $A9E3 + RTL diff --git a/data/base2current.bps b/data/base2current.bps index 13b9ab4e536d50ae220897ada064df65d5f345af..5b85faf181a91c9020324b8e6b46453dbb8ecb1f 100644 GIT binary patch delta 115 zcmV-(0F3|0y9Ua;2C!uT17|syvuFW?0|9fB?F1w-*HgygwYB@B{kjVESN4 zqdW2Ji&U{03{^cEJKy$wqDt VfS*aXKScq7SP0VtSmJGRK$6CBFmwO_ delta 113 zcmV-%0FM94y9UU+2C!uT15-JyvuFW?0|9cA?F1to#P>1kL;gYu|Rk0$a&OZVrH- TOSeHq0fATuO7?LUyF185gt9O< From c9c510ae212dff1f80b3a7a523a729436a1b1c35 Mon Sep 17 00:00:00 2001 From: aerinon Date: Wed, 22 Mar 2023 14:58:07 -0600 Subject: [PATCH 19/24] Minor fixes for customized vanilla doors --- DoorShuffle.py | 14 ++++++++++++++ KeyDoorShuffle.py | 19 ++++++++++++------- Main.py | 2 +- RELEASENOTES.md | 3 +++ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index 6a954f3c..d7255077 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -322,6 +322,11 @@ def connect_simple_door(world, exit_name, region_name, player): d.dest = region +def connect_simple_door_to_region(exit_door, region): + exit_door.entrance.connect(region) + exit_door.dest = region + + def connect_door_only(world, exit_name, region, player): d = world.check_for_door(exit_name, player) if d is not None: @@ -354,6 +359,12 @@ def connect_two_way(world, entrancename, exitname, player): x.dest = y if y is not None: y.dest = x + if x.dependents: + for dep in x.dependents: + connect_simple_door_to_region(dep, ext.parent_region) + if y.dependents: + for dep in y.dependents: + connect_simple_door_to_region(dep, entrance.parent_region) def connect_one_way(world, entrancename, exitname, player): @@ -373,6 +384,9 @@ def connect_one_way(world, entrancename, exitname, player): y = world.check_for_door(exitname, player) if x is not None: x.dest = y + if x.dependents: + for dep in x.dependents: + connect_simple_door_to_region(dep, ext.parent_region) def unmark_ugly_smalls(world, player): for d in ['Eastern Hint Tile Blocked Path SE', 'Eastern Darkness S', 'Thieves Hallway SE', 'Mire Left Bridge S', diff --git a/KeyDoorShuffle.py b/KeyDoorShuffle.py index f8bda68e..81e5a527 100644 --- a/KeyDoorShuffle.py +++ b/KeyDoorShuffle.py @@ -1561,13 +1561,18 @@ def validate_key_layout_sub_loop(key_layout, state, checked_states, flat_proposa def invalid_self_locking_key(key_layout, state, prev_state, prev_avail, world, player): if prev_state is None or state.used_smalls == prev_state.used_smalls: return False - new_bk_doors = set(state.big_doors).difference(set(prev_state.big_doors)) - state_copy = state.copy() - while len(new_bk_doors) > 0: - for door in new_bk_doors: - open_a_door(door.door, state_copy, key_layout.flat_prop, world, player) - new_bk_doors = set(state_copy.big_doors).difference(set(prev_state.big_doors)) - expand_key_state(state_copy, key_layout.flat_prop, world, player) + if state.found_forced_bk() and not prev_state.found_forced_bk(): + return False + if state.big_key_opened: + new_bk_doors = set(state.big_doors).difference(set(prev_state.big_doors)) + state_copy = state.copy() + while len(new_bk_doors) > 0: + for door in new_bk_doors: + open_a_door(door.door, state_copy, key_layout.flat_prop, world, player) + new_bk_doors = set(state_copy.big_doors).difference(set(prev_state.big_doors)) + expand_key_state(state_copy, key_layout.flat_prop, world, player) + else: + state_copy = state new_locations = set(state_copy.found_locations).difference(set(prev_state.found_locations)) important_found = False for loc in new_locations: diff --git a/Main.py b/Main.py index 69476418..fe8fd123 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.13' +version_number = '1.2.0.14' version_branch = '-u' __version__ = f'{version_number}{version_branch}' diff --git a/RELEASENOTES.md b/RELEASENOTES.md index e2c23a11..71d39a67 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.14u + * Small fix for key logic validation (got rid of a false negative) + * Customized doors in ice cross work properly now * 1.2.0.13u * Allow green/blue potion refills to be customized * OW Map showing dungeon entrance at Snitch Lady (West) fixed (instead of @ HC Courtyard) From 7212284ba07c8cd73a03cb189fafd754e300b282 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 22 Mar 2023 16:00:37 -0500 Subject: [PATCH 20/24] Fixed disconnected Dark Chapel Exit with Inverted + Vanilla ER --- source/overworld/EntranceShuffle2.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index 3515fa47..c6898b3a 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -171,6 +171,9 @@ def do_vanilla_connections(avail_pool): connect_vanilla_two_way(ent, avail_pool.default_map[ent], avail_pool) if ent in avail_pool.one_way_map and avail_pool.one_way_map[ent] in avail_pool.exits: connect_vanilla(ent, avail_pool.one_way_map[ent], avail_pool) + if avail_pool.inverted: + ext = avail_pool.world.get_entrance('Dark Sanctuary Hint Exit', avail_pool.player) + ext.connect(avail_pool.world.get_region('Dark Chapel Area', avail_pool.player)) def do_main_shuffle(entrances, exits, avail, mode_def): From f14657ad74379a83ffeaa3c51f9e24e5cf65287e Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 22 Mar 2023 16:00:58 -0500 Subject: [PATCH 21/24] Minor text tweak --- Text.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Text.py b/Text.py index 3df1e679..bf4f22cb 100644 --- a/Text.py +++ b/Text.py @@ -113,7 +113,7 @@ Triforce_texts = [ " Cool seed,\n\n right?", "\n We did it!", " Spam those\n emotes in\n wilds chat", - "\n O M G", + "\n O M G", " Hello. Will you\n you be my friend?", " Beetorp\n was\n here!", " The Wind Fish\n will wake soon.\n Hoot!", From 2de64ef5658797c4a1a4c945a887dfe4677cb99b Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 22 Mar 2023 16:07:39 -0500 Subject: [PATCH 22/24] Set up code structure for future OW palette changes and return to safer changes --- Rom.py | 2 +- asm/owrando.asm | 66 +++++++++++++++++++++++++++--------------- data/base2current.bps | Bin 105930 -> 105965 bytes 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/Rom.py b/Rom.py index 9760d525..cc784646 100644 --- a/Rom.py +++ b/Rom.py @@ -38,7 +38,7 @@ from source.dungeon.RoomList import Room0127 JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '281fb186ab9e30f98e9705398653a754' +RANDOMIZERBASEHASH = '0a3d1d4bbec659013be5ed876c2658bd' class JsonRom(object): diff --git a/asm/owrando.asm b/asm/owrando.asm index 6bafb688..a308a9fc 100644 --- a/asm/owrando.asm +++ b/asm/owrando.asm @@ -48,7 +48,8 @@ org $04E8B4 Overworld_LoadSpecialOverworld: org $02A9DA -JSL OWSkipMosiac +JSL OWSkipPalettes +BCC OverworldHandleTransitions_change_palettes : NOP #4 org $07982A Link_ResetSwimmingState: @@ -943,20 +944,12 @@ OWNewDestination: ; crossed OW shuffle and terrain ldx $05 : ldy $08 : jsr OWWorldTerrainUpdate - - lda $05 : sta $8a : JSR OWDetermineScreensPaletteSet - - ;PLA : AND.b #$3F : BEQ .leaving_woods - ;LDA $8A : AND.b #$3F : BEQ .entering_woods - CPX.w $0AB3 : BEQ .skip_palette ; check if next screen's palette is different - LDA $00 : PHA - JSL OverworldLoadScreensPaletteSet_long ; loading correct OW palette - PLA : STA $00 - ;.leaving_woods - ;.entering_woods - .skip_palette - lda $8a + ldx $8a : lda $05 : sta $8a : stx $05 ; $05 is prev screen id, $8a is dest screen + + jsr OWGfxUpdate + + lda $8a rep #$30 : rts } OWLoadSpecialArea: @@ -1084,6 +1077,23 @@ OWWorldTerrainUpdate: ; x = owid of destination screen, y = 1 for land to water, .return RTS } +OWGfxUpdate: +{ + REP #$20 : LDA.l OWMode : AND.w #$0207 : BEQ .is_only_mixed : SEP #$20 + ;;;;PLA : AND.b #$3F : BEQ .leaving_woods + LDA.b $8A : AND.b #$3F : BEQ .entering_woods + ;LDA.b $05 : JSL OWSkipPalettes : BCS .skip_palettes + LDA.b $8A : JSR OWDetermineScreensPaletteSet + CPX.w $0AB3 : BEQ .skip_palettes ; check if next screen's palette is different + LDA $00 : PHA + JSL OverworldLoadScreensPaletteSet_long ; loading correct OW palette + PLA : STA $00 + .leaving_woods + .entering_woods + .is_only_mixed + .skip_palettes + SEP #$20 +} OWLoadGearPalettes: { PHX : PHY : LDA $00 : PHA @@ -1105,21 +1115,29 @@ OWDetermineScreensPaletteSet: ; A = OWID to check CMP.b #$07 : BEQ .death_mountain LDX.b #$00 .death_mountain - PLA : PHX : TAX : LDA.l OWTileWorldAssoc,x : BEQ + + PLA : PHX : TAX : LDA.l OWTileWorldAssoc,X : BEQ + PLX : INX : RTS + PLX : RTS } -OWSkipMosiac: +OWSkipPalettes: { - PHA - LDA.l OWMode : ORA.l OWMode+1 : BEQ .vanilla - PLA : PLA : PLA : PEA $A9F2 - RTL + STA.b $05 ; A = previous screen, also stored in $05 + ; only skip mosaic if OWR Layout or Crossed + PHP : REP #$20 : LDA.l OWMode : AND.w #$0207 : BEQ .vanilla : PLP + ; checks to see if going to from any DM screens + ;LDA.b $05 : JSR OWDetermineScreensPaletteSet : TXA : AND.b #$FE : STA $04 + ;LDA.b $8A : JSR OWDetermineScreensPaletteSet : TXA : AND.b #$FE + ;CMP.b $04 : BNE .skip_palettes + BRA .vanilla+1 + .vanilla - PLA : AND.b #$3F : BNE + ; what we wrote over, kinda - PLA : PLA : PEA $A9E3 - + - RTL + PLP + LDA.b $05 : AND.b #$3F : BEQ .skip_palettes ; what we + LDA.b $8A : AND.b #$BF : BNE .change_palettes ; wrote over, kinda + .skip_palettes + SEC : RTL ; mosaic transition occurs + .change_palettes + CLC : RTL } OWAdjustExitPosition: { diff --git a/data/base2current.bps b/data/base2current.bps index 5b85faf181a91c9020324b8e6b46453dbb8ecb1f..d492f90b61065409a0fa2cfbfa8766eb30c23ef7 100644 GIT binary patch delta 454 zcmV;%0XhE4y9VvM2C!uT1hOqn(z9s+tO5+BB6OCjkQ3_a>gq(38wAk-mXqxSDFM!d z7X`N$1pyy60lK$0I{`uj0g;z_KLH&Ci;Q`Imz+NVKmkXW-9G_r0lK$JKmpnUEIEL^ z5C#}y0i6&AXyP!X1Svllc_xSojQ|Ix1*8Zdx|F7hr3HnGh6NxHmX}*Y0V@)^lwg|( zEFFM>3ZGP-(a-}-l$V%80VM&4m%c**BnCN_fNUT+m*_(QHyt^arCrGc&<7$am8Natz=!m0nj_8UC9LSHIvDcHx3Da%?_nq$rtbl zsRV^xoInF$+8T`m2cs+w34nco`lVgT7tjZ(1C0X*WL;pwAg=;|swoEo@EqbGrHUy( z@D!zrAXAp?vkLGEr2t4G^235?g#h9p+FGRmNUh)kt}H->lSdh(jbNezD@eXgKbM7Q z+LJnnrSJp#=wSL_g#`$wQWB(@11Nw2D5V9WVds(@DU~sRm-R#eE+1b-6M)6$5oEAy wto#P>1kL;gYu|Rk0!zq7ZVrH-1D8QX0UQH4X^6LAMFC=12#FQY0*s delta 397 zcmV;80doHBy9Ua;2C!uT1ZO#z#>)nLIeSvmw-P39R&q}Ae@w!p+5mY0X3K6KLKn3#kWsD0onoqWtS>L0Uj8| zl%)lQiXb(X?6V5+3Z(!@BJ#t6XoUcmRYL(Q62+8Yn+Pl&fPo61RG!h$15BTnl0yL{ z0g{)vLjfcP8W&r0!Y41KbM7Q+LJnno$v$t=wSL_NTWb{qkVt}XlQ8k@~LZR zDL>E!XlV4~scV-PMFB27ODz+Cjzy2PYpnbR@C42L25aAT!2(ywMs5y(pGjnc*LiXi rfU9mRo|_Lbj-Ox@nwMNhj++!QsmfetinoJB0b*DP(*s!IZE`@8VCkJP From 37750c55cfe33d8257d8e3b2f7f3cf5a12de36c9 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 22 Mar 2023 16:09:01 -0500 Subject: [PATCH 23/24] Remove Polar from Crossed if Mixed not enabled --- BaseClasses.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BaseClasses.py b/BaseClasses.py index 40b48ec9..39a032fb 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -26,9 +26,10 @@ class World(object): self.teams = 1 self.owShuffle = owShuffle.copy() self.owTerrain = {} - self.owCrossed = owCrossed.copy() self.owKeepSimilar = {} self.owMixed = owMixed.copy() + self.owCrossed = owCrossed.copy() + self.owCrossed = self.owCrossed if self.owCrossed != 'polar' or self.owMixed else 'none' self.owWhirlpoolShuffle = {} self.owFluteShuffle = {} self.shuffle = shuffle.copy() From 4cbd45c17b41aad896ad6e1eadf938574a67298d Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 22 Mar 2023 17:49:32 -0500 Subject: [PATCH 24/24] Version bump 0.3.0.4 --- CHANGELOG.md | 8 ++++++++ OverworldShuffle.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3329232e..42ae2fb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.3.0.4 +- \~Merged in DR v1.2.0.14~ + - Fixed issue with enemy drops on OW enemies + - Fixed issue with magically opened doors +- Inverted + Vanilla ER can now generate +- Fixed issue with Multiworld bonk items not sending to correct player +- Minor improvements to OW Palettes on screen transition + ## 0.3.0.3 - Fixed issue with new Cold Fairy Statue location not dropping correct item - Fixed issue with Multiworld due to new Cold Fairy Statue location diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 4623610a..b9e2dc8f 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.3' +version_number = '0.3.0.4' # branch indicator is intentionally different across branches version_branch = '-u'