From f62ba514691163fedf405fbf0df92128f58d34f2 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 3 Nov 2020 10:17:46 -0700 Subject: [PATCH] Baserom re-factor of compass code Scrolling fix --- Main.py | 2 +- Rom.py | 67 ++++-------------------------------------- asm/drhooks.asm | 11 ------- asm/overrides.asm | 4 --- asm/scroll.asm | 12 ++++---- data/base2current.bps | Bin 131180 -> 130766 bytes 6 files changed, 12 insertions(+), 84 deletions(-) diff --git a/Main.py b/Main.py index 588be431..b921812e 100644 --- a/Main.py +++ b/Main.py @@ -24,7 +24,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties, fill_prizes from Utils import output_path, parse_player_names -__version__ = '0.2.0.6-u' +__version__ = '0.2.0.7-u' class EnemizerError(RuntimeError): pass diff --git a/Rom.py b/Rom.py index 4e7e641f..4b45ffe9 100644 --- a/Rom.py +++ b/Rom.py @@ -24,7 +24,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '6904a4588b21d1674e1fa25e96da8339' +RANDOMIZERBASEHASH = '78947c3825898cac3ab57cbe44b50390' class JsonRom(object): @@ -635,10 +635,7 @@ def patch_rom(world, rom, player, team, enemized): rom.write_byte(0x15270, 2) sanctuary = world.get_region('Sanctuary', player) rom.write_byte(0x1597b, sanctuary.dungeon.dungeon_id*2) - if compass_code_good(rom): - update_compasses(rom, world, player) - else: - logging.getLogger('').warning('Randomizer rom update! Compasses in crossed are borken') + update_compasses(rom, world, player) # patch doors if world.doorShuffle[player] == 'crossed': @@ -2211,67 +2208,13 @@ def patch_shuffled_dark_sanc(world, rom, player): rom.write_bytes(0x180262, [unknown_1, unknown_2, 0x00]) -# 24B118 and 20BB32 -compass_r_addr = 0x123118 # a9 90 24 8f 9a c7 7e -# compass_w_addr = 0x103b32 # e2 20 ad 0c 04 c9 00 d0 -compass_w_addr = 0x103b53 # e2 20 ad 0c 04 c9 00 d0 - - -def compass_code_good(rom): - if isinstance(rom, LocalRom): - # a990248f9ac77e - if rom.buffer[compass_r_addr] != 0xa9 or rom.buffer[compass_r_addr+1] != 0x90 or rom.buffer[compass_r_addr+2] != 0x24: - return False - if rom.buffer[compass_r_addr+3] != 0x8f or rom.buffer[compass_r_addr+4] != 0x9a or rom.buffer[compass_r_addr+5] != 0xc7: - return False - if rom.buffer[compass_w_addr] != 0xe2 or rom.buffer[compass_w_addr+1] != 0x20 or rom.buffer[compass_w_addr+2] != 0xad: - return False - if rom.buffer[compass_w_addr+3] != 0x0c or rom.buffer[compass_w_addr+4] != 0x04 or rom.buffer[compass_w_addr+5] != 0xc9: - return False - return True - - def update_compasses(rom, world, player): layouts = world.dungeon_layouts[player] - # cmp XX : bne escape - # cpy 32 : bne escape - # brl .itemCounts - # c9 02 d0 eastern - # nop #2 - new_code = [0x07, 0xC0, 0x32, 0xD0, 0x03, 0x82, 0xB9, 0x01, 0xC9, 0x02, 0xD0, 0x10, 0xEA, 0xEA] - rom.write_bytes(compass_w_addr + 8, new_code) - # 05 06 07 08 - # C9 00 D0 02 80 04 C9 02 D0 15 C0 32 D0 03 82 B3 01 - # C9 XX D0 07 C0 32 D0 03 82 B9 01 C9 02 D0 10 EA EA - for name, builder in layouts.items(): - digit_offset, sram_byte, write_offset, jmp_nop_flag, dungeon_id = compass_data[name] - digit1 = builder.location_cnt // 10 - digit2 = builder.location_cnt % 10 - rom.write_byte(compass_r_addr+digit_offset, 0x90+digit1) - rom.write_byte(compass_r_addr+digit_offset+7, 0x90+digit2) - - # read compass count code - start_address = compass_r_addr+digit_offset+15 - - # -0x59 relative to compass_r_addr, +8000 because rom -120000 to get rid of high byte - jmp_address = compass_r_addr-0x118059 - # lda $7ef4(sb); jmp $jmp_address - rom.write_bytes(start_address, [0xaf, sram_byte, 0xf4, 0x7e, 0x4c, jmp_address % 0x100, jmp_address // 0x100]) - - # write compass count code - write_address = compass_w_addr+write_offset - # 0x186 relative to compass_r_addr, +8000 because rom -100000 to get rid of high byte - jmp_address = compass_w_addr-0xf7e7a - # lda $7ef4(sb); inc; sta $7ef4(sb) - rom.write_bytes(write_address, [0xaf, sram_byte, 0xf4, 0x7e, 0x1a, 0x8f, sram_byte, 0xf4, 0x7e]) - if jmp_nop_flag == 0: - rom.write_bytes(write_address+9, [0x4c, jmp_address % 0x100, jmp_address // 0x100]) # jmp $jmp_address - else: - for i in range(0, jmp_nop_flag): - rom.write_byte(write_address+9+i, 0xea) # nop + dungeon_id = compass_data[name][4] + rom.write_byte(0x187000 + dungeon_id//2, builder.location_cnt) if builder.bk_provided: - rom.write_byte(compass_w_addr+6, dungeon_id) + rom.write_byte(0x186FFF, dungeon_id) InconvenientDungeonEntrances = {'Turtle Rock': 'Turtle Rock Main', diff --git a/asm/drhooks.asm b/asm/drhooks.asm index 66d283a4..41295aa7 100644 --- a/asm/drhooks.asm +++ b/asm/drhooks.asm @@ -104,12 +104,6 @@ nop : stz $0dd0, X : rts .not_in_ganons_tower -;org $208206 -org $20820E -jsl MirrorCheckOverride2 -;org $208270 -org $20827C -jsl MirrorCheckOverride2 org $07a955 ; <- Bank07.asm : around 6564 (JP is a bit different) (STZ $05FC : STZ $05FD) jsl BlockEraseFix nop #2 @@ -131,11 +125,6 @@ nop #2 : jsl BlindAtticFix org $028409 jsl SuctionOverworldFix -; also rando's hooks.asm line 1360 -; 106e4e -> goes to a0ee4e -;org $a0ee8a ; <- 6FC4C - headsup_display.asm : 836 (LDA $7EF36E : AND.w #$00FF : ADD.w #$0007 : AND.w #$FFF8 : TAX) -org $a0eeab -jsl DrHudOverride org $0ded04 ; <- rando's hooks.asm line 2192 - 6ED04 - equipment.asm : 1963 (REP #$30) jsl DrHudDungeonItemsAdditions ;org $098638 ; rando's hooks.asm line 2192 diff --git a/asm/overrides.asm b/asm/overrides.asm index 07bb83ef..e73f22ac 100644 --- a/asm/overrides.asm +++ b/asm/overrides.asm @@ -49,10 +49,6 @@ MirrorCheckOverride: rtl + lda.l DRScroll : rtl -MirrorCheckOverride2: - lda $7ef353 : and #$02 : rtl - - BlockEraseFix: lda $7ef353 : and #$02 : beq + stz $05fc : stz $05fd diff --git a/asm/scroll.asm b/asm/scroll.asm index 133f4d19..299b995a 100644 --- a/asm/scroll.asm +++ b/asm/scroll.asm @@ -177,20 +177,20 @@ ScrollX: ;change the X offset variables rts LimitXCamera: - cmp #$0080 : !bge + + cmp #$0079 : !bge + lda #$0000 : bra .end - + cmp #$0181 : !blt + - lda #$0180 - + !sub #$0080 + + cmp #$0178 : !blt + + lda #$0178 + + !sub #$0078 .end rts CheckRoomLayoutX: jsr LoadRoomLayout ;switches to 8-bit cmp #$04 : !blt .lock cmp #$05 : bne + - lda $04 : cmp #$f8 : beq .lock + lda $06 : cmp #$ff : beq .lock + cmp #$06 : bne .free - lda $04 : cmp #$f8 : bne .lock + lda $06 : cmp #$ff : bne .lock .free rep #$30 : clc : rts .lock rep #$30 : sec : rts diff --git a/data/base2current.bps b/data/base2current.bps index 04a89541a9fda222cf8ea68547bba1e868e60cce..3c8ec12e285714cdb178fa4ffc7397b0ca51ee75 100644 GIT binary patch delta 12509 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 delta 13101 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