Baserom re-factor of compass code
Scrolling fix
This commit is contained in:
2
Main.py
2
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 ItemList import generate_itempool, difficulties, fill_prizes
|
||||||
from Utils import output_path, parse_player_names
|
from Utils import output_path, parse_player_names
|
||||||
|
|
||||||
__version__ = '0.2.0.6-u'
|
__version__ = '0.2.0.7-u'
|
||||||
|
|
||||||
class EnemizerError(RuntimeError):
|
class EnemizerError(RuntimeError):
|
||||||
pass
|
pass
|
||||||
|
|||||||
67
Rom.py
67
Rom.py
@@ -24,7 +24,7 @@ from EntranceShuffle import door_addresses, exit_ids
|
|||||||
|
|
||||||
|
|
||||||
JAP10HASH = '03a63945398191337e896e5771f77173'
|
JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
RANDOMIZERBASEHASH = '6904a4588b21d1674e1fa25e96da8339'
|
RANDOMIZERBASEHASH = '78947c3825898cac3ab57cbe44b50390'
|
||||||
|
|
||||||
|
|
||||||
class JsonRom(object):
|
class JsonRom(object):
|
||||||
@@ -635,10 +635,7 @@ def patch_rom(world, rom, player, team, enemized):
|
|||||||
rom.write_byte(0x15270, 2)
|
rom.write_byte(0x15270, 2)
|
||||||
sanctuary = world.get_region('Sanctuary', player)
|
sanctuary = world.get_region('Sanctuary', player)
|
||||||
rom.write_byte(0x1597b, sanctuary.dungeon.dungeon_id*2)
|
rom.write_byte(0x1597b, sanctuary.dungeon.dungeon_id*2)
|
||||||
if compass_code_good(rom):
|
update_compasses(rom, world, player)
|
||||||
update_compasses(rom, world, player)
|
|
||||||
else:
|
|
||||||
logging.getLogger('').warning('Randomizer rom update! Compasses in crossed are borken')
|
|
||||||
|
|
||||||
# patch doors
|
# patch doors
|
||||||
if world.doorShuffle[player] == 'crossed':
|
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])
|
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):
|
def update_compasses(rom, world, player):
|
||||||
layouts = world.dungeon_layouts[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():
|
for name, builder in layouts.items():
|
||||||
digit_offset, sram_byte, write_offset, jmp_nop_flag, dungeon_id = compass_data[name]
|
dungeon_id = compass_data[name][4]
|
||||||
digit1 = builder.location_cnt // 10
|
rom.write_byte(0x187000 + dungeon_id//2, builder.location_cnt)
|
||||||
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
|
|
||||||
if builder.bk_provided:
|
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',
|
InconvenientDungeonEntrances = {'Turtle Rock': 'Turtle Rock Main',
|
||||||
|
|||||||
@@ -104,12 +104,6 @@ nop : stz $0dd0, X : rts
|
|||||||
.not_in_ganons_tower
|
.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)
|
org $07a955 ; <- Bank07.asm : around 6564 (JP is a bit different) (STZ $05FC : STZ $05FD)
|
||||||
jsl BlockEraseFix
|
jsl BlockEraseFix
|
||||||
nop #2
|
nop #2
|
||||||
@@ -131,11 +125,6 @@ nop #2 : jsl BlindAtticFix
|
|||||||
org $028409
|
org $028409
|
||||||
jsl SuctionOverworldFix
|
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)
|
org $0ded04 ; <- rando's hooks.asm line 2192 - 6ED04 - equipment.asm : 1963 (REP #$30)
|
||||||
jsl DrHudDungeonItemsAdditions
|
jsl DrHudDungeonItemsAdditions
|
||||||
;org $098638 ; rando's hooks.asm line 2192
|
;org $098638 ; rando's hooks.asm line 2192
|
||||||
|
|||||||
@@ -49,10 +49,6 @@ MirrorCheckOverride:
|
|||||||
rtl
|
rtl
|
||||||
+ lda.l DRScroll : rtl
|
+ lda.l DRScroll : rtl
|
||||||
|
|
||||||
MirrorCheckOverride2:
|
|
||||||
lda $7ef353 : and #$02 : rtl
|
|
||||||
|
|
||||||
|
|
||||||
BlockEraseFix:
|
BlockEraseFix:
|
||||||
lda $7ef353 : and #$02 : beq +
|
lda $7ef353 : and #$02 : beq +
|
||||||
stz $05fc : stz $05fd
|
stz $05fc : stz $05fd
|
||||||
|
|||||||
@@ -177,20 +177,20 @@ ScrollX: ;change the X offset variables
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
LimitXCamera:
|
LimitXCamera:
|
||||||
cmp #$0080 : !bge +
|
cmp #$0079 : !bge +
|
||||||
lda #$0000 : bra .end
|
lda #$0000 : bra .end
|
||||||
+ cmp #$0181 : !blt +
|
+ cmp #$0178 : !blt +
|
||||||
lda #$0180
|
lda #$0178
|
||||||
+ !sub #$0080
|
+ !sub #$0078
|
||||||
.end rts
|
.end rts
|
||||||
|
|
||||||
CheckRoomLayoutX:
|
CheckRoomLayoutX:
|
||||||
jsr LoadRoomLayout ;switches to 8-bit
|
jsr LoadRoomLayout ;switches to 8-bit
|
||||||
cmp #$04 : !blt .lock
|
cmp #$04 : !blt .lock
|
||||||
cmp #$05 : bne +
|
cmp #$05 : bne +
|
||||||
lda $04 : cmp #$f8 : beq .lock
|
lda $06 : cmp #$ff : beq .lock
|
||||||
+ cmp #$06 : bne .free
|
+ cmp #$06 : bne .free
|
||||||
lda $04 : cmp #$f8 : bne .lock
|
lda $06 : cmp #$ff : bne .lock
|
||||||
.free rep #$30 : clc : rts
|
.free rep #$30 : clc : rts
|
||||||
.lock rep #$30 : sec : rts
|
.lock rep #$30 : sec : rts
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user