From 923ba14d61d9992d0612d72fa3eec257f55406ad Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 14 Nov 2025 09:05:12 -0700 Subject: [PATCH 01/12] feat: force_enemy feature feat: rom-side enemy "spies" --- BaseClasses.py | 1 + Main.py | 9 ++++++++- Rom.py | 2 +- data/base2current.bps | Bin 118123 -> 118196 bytes source/classes/CustomSettings.py | 8 ++++++++ source/enemizer/Enemizer.py | 17 +++++++++++------ source/enemizer/SpriteSheets.py | 6 ++++-- 7 files changed, 33 insertions(+), 10 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 529eca39..6a12f32e 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -129,6 +129,7 @@ class World(object): set_player_attr('enemy_health', 'default') set_player_attr('enemy_damage', 'default') set_player_attr('any_enemy_logic', 'allow_all') + set_player_attr('force_enemy', None) set_player_attr('beemizer', '0') set_player_attr('escape_assist', []) set_player_attr('crystals_needed_for_ganon', 7) diff --git a/Main.py b/Main.py index 3c4d8c9b..197602e2 100644 --- a/Main.py +++ b/Main.py @@ -38,7 +38,7 @@ from source.enemizer.DamageTables import DamageTable from source.enemizer.Enemizer import randomize_enemies from source.rom.DataTables import init_data_tables -version_number = '1.4.11' +version_number = '1.5.0' version_branch = '-u' __version__ = f'{version_number}{version_branch}' @@ -170,6 +170,13 @@ def main(args, seed=None, fish=None): world.rom_seeds = {player: random.randint(0, 999999999) for player in range(1, world.players + 1)} world.finish_init() + # custom settings - these haven't been promoted to full settings yet + in_progress_settings = ['force_enemy'] + for player in range(1, world.players + 1): + for setting in in_progress_settings: + if world.customizer and world.customizer.has_setting(player, setting): + getattr(world, setting)[player] = world.customizer.get_setting(player, setting) + logger.info( world.fish.translate("cli","cli","app.title") + "\n", __version__, diff --git a/Rom.py b/Rom.py index fc343d7e..04987530 100644 --- a/Rom.py +++ b/Rom.py @@ -42,7 +42,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f0881c7ccde2f0d0cd5e9cfe481633ad' +RANDOMIZERBASEHASH = '1e87ad01a54f1c15e2ec16a79a9bcc20' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index e919637df15e2adc47a00eb2383ceb334378988b..a287a08d9090504aa003b5e346d481fe5fdad888 100644 GIT binary patch delta 1216 zcmWlXZA?>V7>3{X@YP`{trS{Xz*77eA1bm4eod*UYjH3~rYImVQQEN~0aS`Oc@MR< zr&@|VmUqz6ZmHs|vMzK=w@zAGRuM7y$7Da8)6Hd?nUu_I&WWDYU(bEt$@Sz(p8LL-DAqLZltqagIcQjG(WzpETA)R$V5ITn%ZQr+FfJr@DeQ z;7_QR=2BNRPW6~m4Zq$3o5uEBgKY%t#4|ovSgKN~TrucEHfyebXT|-I8ox&?O?#-T z33{|v{`+?>#=mwK7uM9=)zN3ED^8os-5cAAj5Xz>HhPju7`63xbo7~4pL&27_+dtL z>Q+9&d4AYO)MnvvKTIbMs*V+EgFapcPI z?~^cC+4j+6+Z)NJ=tZrW$Y2O^RPhMQn*JF+O_#SMAaa!>@wBzdZGJR)C#k4-@_p{T|KQ?MXj zm@`WW!3KBkQha9$YNY&4eB?aTe#xwq+o?~%3wPrW&VzD0U8nL;Uf^{ft;0ueK*{>m zZ_nCG(`N@o3fnMGVH-@4X))Bf1m%>G0VEhpr*PX|%FL0EdW$x2kZ(;b2L(!EF4OJR z_|6Tuk!W0klc%9XtZZ9=@IF2potXpwftRkqE+iWXND(cL#XF{9Ex)+>dm|fUfIy!G z#DU|$=#a^AU>YijatThj30Gvrump&z156aTc~=SwEXy&N*S6gtpVB!#V-RS7z2i+> zdlMe(-mr2Z3iNu#-V6vxkVK?+i99py!+P&!ZnhmOVS6sNTs%QkhQf+9l}KpH?`q5}r%b1hUZ zT8h1vGpSIQPB5@pwKFg}ty~x~UIN+nVc7@Widp#bCO?v$@$VQ z`Kw)Wg$W2W4B%#WP(XoV;U&vQfi&I7nxv;#bH0)7xW}60oTbF%Hb(Xak$LXrv9AV; zW#{6$3}&{;JzbF(9F%avl7doxWsQodAbfUBX24n2WV~9_ceRFG-bAAM@^6qs4B3I- zdx<8w?e)FBM=ru@rh{D*kB{XxUg*eez0lzbVKqKdnma3SH}@C@y*rNGz$3RvE3-z8 zl0mX)l{Sf?w)Kz>OF@v|=j9O%-HOeRTwB%y#mrDC?eIYjc;OD8~nnS+Ss<8_uYcB6 z5O~ryv*%&X!<-&N;7MMWIEe`zsNMyW05Glb2QH=9Hv0Yi zaYrLi=N1K~jf&DVMaYg41yfaoI7*hqN%i4$aCWxR_w?!c=ijBiBp}-U(-UX>skX(L zn1jELlC-&pmrij}knWZwV(hoXc)W6*g7zG)>a`Z@9o$j)*L~pYo^ri|Ut8SIdBEe& z%Ig=bZ6v9QpHIy%MM!~3YHEZlPK#LthMpGtg7hiJV&znObVg^_f{f1gdD=!KCRf$F zoVdY4-y#mT<#JY;{+cIjt&DmV@5`v5oAWupJx5JZHAd2zjR}}HMpQAn4?`)w6(*%; zeDDvvaJAP_?H7WY^3{QOZj9t9lsN-tDa3-%Y6A%z1G96{77QIH8BB5Mo>qTX2cu`G2qQE@i-R8 zi~sN#p23gs0K7@!ggIrQv@J2sV|xL0@b}ZUHBrCVGsMjPc9aNt2hM?nUqd^?3O}HF8cl*13=tS;67DL{c diff --git a/source/classes/CustomSettings.py b/source/classes/CustomSettings.py index a86e782b..a9ef34d9 100644 --- a/source/classes/CustomSettings.py +++ b/source/classes/CustomSettings.py @@ -189,6 +189,14 @@ class CustomSettings(object): args.shuffle_sfx[p] = get_setting(settings['shuffle_sfx'], args.shuffle_sfx[p]) args.msu_resume[p] = get_setting(settings['msu_resume'], args.msu_resume[p]) + def has_setting(self, player, setting): + if 'settings' in self.file_source and player in self.file_source['settings']: + return setting in self.file_source['settings'][player] + return False + + def get_setting(self, player, setting): + return self.file_source['settings'][player][setting] + def get_item_pool(self): if 'item_pool' in self.file_source: return self.file_source['item_pool'] diff --git a/source/enemizer/Enemizer.py b/source/enemizer/Enemizer.py index 90c7ef34..178e24b1 100644 --- a/source/enemizer/Enemizer.py +++ b/source/enemizer/Enemizer.py @@ -1,4 +1,5 @@ import RaceRandom as random +from collections import defaultdict from Utils import snes_to_pc from source.dungeon.EnemyList import SpriteType, EnemySprite, sprite_translation @@ -428,12 +429,16 @@ def randomize_enemies(world, player): if world.enemy_shuffle[player] != 'none': data_tables = world.data_tables[player] custom_uw, custom_ow = {}, {} - enemy_map = world.customizer.get_enemies() if world.customizer else None - if enemy_map and player in enemy_map: - if 'Underworld' in enemy_map[player]: - custom_uw = enemy_map[player]['Underworld'] - if 'Overworld' in enemy_map[player]: - custom_ow = enemy_map[player]['Overworld'] + if world.force_enemy[player]: + custom_ow = {area_id: {i: world.force_enemy[player] for i, s in enumerate(sprite_list)} for area_id, sprite_list in world.data_tables[player].ow_enemy_table.items()} + custom_uw = {room_id: {i: world.force_enemy[player] for i, s in enumerate(sprite_list)} for room_id, sprite_list in world.data_tables[player].uw_enemy_table.room_map.items()} + else: + enemy_map = world.customizer.get_enemies() if world.customizer else None + if enemy_map and player in enemy_map: + if 'Underworld' in enemy_map[player]: + custom_uw = enemy_map[player]['Underworld'] + if 'Overworld' in enemy_map[player]: + custom_ow = enemy_map[player]['Overworld'] randomize_underworld_sprite_sheets(data_tables.sprite_sheets, data_tables, custom_uw) randomize_underworld_rooms(data_tables, world, player, custom_uw) randomize_overworld_sprite_sheets(data_tables.sprite_sheets, data_tables, custom_ow) diff --git a/source/enemizer/SpriteSheets.py b/source/enemizer/SpriteSheets.py index abc2387c..7de739f3 100644 --- a/source/enemizer/SpriteSheets.py +++ b/source/enemizer/SpriteSheets.py @@ -655,9 +655,11 @@ def setup_custom_enemy_sheets(custom_enemies, sheets, data_tables, sheet_range, if key not in requirements: continue req = requirements[key] - if isinstance(req, dict): + if isinstance(req, dict) and room_id in req: req = req[room_id] - if req.static or not req.can_randomize: + else: + req = None + if req and (req.static or not req.can_randomize): try: combine_req(sub_groups_choices, req) except IncompatibleEnemyException: From f6d774b13f589c249b3e3158ee9cadffa542635f Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 14 Nov 2025 13:24:08 -0700 Subject: [PATCH 02/12] fix: potential fix for GT basement --- DoorShuffle.py | 7 ++++++- Rules.py | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index e2e25390..32b15ec5 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -290,7 +290,12 @@ def vanilla_key_logic(world, player): create_alternative_door_rules('Mire Map Spike Side Blue Barrier', 2, 'Misery Mire', world, player) create_alternative_door_rules('Mire Crystal Dead End Left Barrier', 2, 'Misery Mire', world, player) create_alternative_door_rules('Mire Crystal Dead End Right Barrier', 2, 'Misery Mire', world, player) - # gt logic? I'm unsure it needs adjusting + # gt logic + conveyor_star_pits_door = world.key_logic[player]['Ganons Tower'].door_rules['GT Conveyor Star Pits EN'] + firesnake_door = world.key_logic[player]['Ganons Tower'].door_rules['GT Firesnake Room SW'] + firesnake_door.alternate_big_key_loc.update(conveyor_star_pits_door.alternate_big_key_loc) + tile_door = world.key_logic[player]['Ganons Tower'].door_rules['GT Tile Room EN'] + tile_door.alternate_big_key_loc.update(conveyor_star_pits_door.alternate_big_key_loc) def create_alternative_door_rules(door, amount, dungeon, world, player): diff --git a/Rules.py b/Rules.py index c0368efd..5d059a5c 100644 --- a/Rules.py +++ b/Rules.py @@ -2434,6 +2434,9 @@ def eval_small_key_door_partial_main(state, door_name, dungeon, player): number = min(number, door_rule.alternate_small_key) door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) break + if state.placing_items and any(lock_item == item.name for item in state.placing_items): + number = min(number, door_rule.alternate_small_key) + door_openable |= state.has_sm_key(key_logic.small_key_name, player, number) return door_openable From 5ce9a3e297b94c2515470f0e47506a971ece7cdd Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 14 Nov 2025 13:43:32 -0700 Subject: [PATCH 03/12] refactor: remove old asm code --- asm/doorrando.asm | 44 -- asm/doortables.asm | 696 -------------------------------- asm/dr_lobby.asm | 10 - asm/drhooks.asm | 221 ---------- asm/edges.asm | 299 -------------- asm/gfx.asm | 95 ----- asm/hudadditions.asm | 291 ------------- asm/keydoors.asm | 42 -- asm/math.asm | 66 --- asm/normal.asm | 419 ------------------- asm/overrides.asm | 154 ------- asm/scroll.asm | 222 ---------- asm/spiral.asm | 332 --------------- asm/testdata/horizontaltest.txt | 227 ----------- asm/testdata/vanilla.txt | 227 ----------- asm/testdata/verticaltest.txt | 227 ----------- 16 files changed, 3572 deletions(-) delete mode 100644 asm/doorrando.asm delete mode 100644 asm/doortables.asm delete mode 100644 asm/dr_lobby.asm delete mode 100644 asm/drhooks.asm delete mode 100644 asm/edges.asm delete mode 100644 asm/gfx.asm delete mode 100644 asm/hudadditions.asm delete mode 100644 asm/keydoors.asm delete mode 100644 asm/math.asm delete mode 100644 asm/normal.asm delete mode 100644 asm/overrides.asm delete mode 100644 asm/scroll.asm delete mode 100644 asm/spiral.asm delete mode 100644 asm/testdata/horizontaltest.txt delete mode 100644 asm/testdata/vanilla.txt delete mode 100644 asm/testdata/verticaltest.txt diff --git a/asm/doorrando.asm b/asm/doorrando.asm deleted file mode 100644 index cc134be9..00000000 --- a/asm/doorrando.asm +++ /dev/null @@ -1,44 +0,0 @@ -!add = "clc : adc" -!addl = "clc : adc.l" -!sub = "sec : sbc" -!bge = "bcs" -!blt = "bcc" - -; Free RAM notes -; Normal doors use $AB-AC for scrolling indicator -; Normal doors use $FE to store the trap door indicator -; Normal doors use $045e to store Y coordinate when transitioning to in-room stairs -; Normal doors use $045f to determine the order in which supertile quadrants are drawn -; Straight stairs use $046d to store X coordinate on animation start -; Spiral doors use $045e to store stair type -; Gfx uses $b1 to for sub-sub-sub-module thing - -; Hooks into various routines -incsrc drhooks.asm - -;Main Code -org $278000 ;138000 -db $44, $52 ;DR -DRMode: -dw 0 -DRFlags: -dw 0 -DRScroll: -db 0 -OffsetTable: -dw -8, 8 - -incsrc normal.asm -incsrc scroll.asm -incsrc spiral.asm -incsrc gfx.asm -incsrc keydoors.asm -incsrc overrides.asm -incsrc edges.asm -incsrc math.asm -incsrc hudadditions.asm -incsrc dr_lobby.asm -warnpc $279C00 - -incsrc doortables.asm -warnpc $288000 diff --git a/asm/doortables.asm b/asm/doortables.asm deleted file mode 100644 index 90678ca3..00000000 --- a/asm/doortables.asm +++ /dev/null @@ -1,696 +0,0 @@ -org $279C00 -KeyDoorOffset: -; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler -dw $0000,$0001,$0003,$0000,$0006,$0000,$000b,$0000,$0000,$0000,$000c,$000d,$0010,$0011,$0012,$0000 -dw $0000,$0015,$0018,$001c,$001e,$0025,$0027,$0000,$0000,$002b,$002d,$0033,$0035,$0038,$0039,$003d -dw $003f,$0040,$0043,$0045,$0047,$0000,$004f,$0000,$0053,$0000,$0055,$005b,$0000,$0000,$005f,$0000 -dw $0060,$0062,$0064,$0065,$0066,$0068,$006e,$0074,$007a,$007c,$007e,$0081,$0000,$0082,$0086,$0088 -dw $0089,$008a,$0000,$008b,$008e,$0092,$0096,$0000,$0000,$0099,$009d,$00a2,$00a5,$00a6,$00a8,$00aa -dw $00ab,$00ad,$00af,$00b2,$0000,$0000,$00b5,$00b9,$00bf,$00c5,$00c9,$00ca,$00cc,$00ce,$00d1,$00d5 -dw $00d6,$00dc,$00e3,$00e9,$00ec,$00ed,$00ee,$00f2,$00f5,$0000,$00f7,$00f8,$00fc,$00ff,$0102,$0000 -dw $0000,$0103,$0106,$0107,$010a,$010c,$010e,$0112,$0000,$0000,$0000,$0114,$0117,$011b,$011e,$0121 -dw $0000,$0123,$0000,$0124,$0127,$0128,$0000,$012c,$0000,$0000,$0000,$012e,$0133,$0139,$013e,$0000 -dw $013f,$0140,$0141,$0146,$0000,$0149,$014b,$014d,$014f,$0150,$0000,$0153,$0156,$015a,$015d,$0161 -dw $0163,$0164,$0166,$016a,$016c,$016d,$0000,$0000,$0170,$0176,$017c,$0182,$0184,$0000,$0185,$0186 -dw $0188,$018b,$018f,$0197,$019c,$019d,$019e,$01a3,$01a4,$01a6,$01aa,$01ad,$01b3,$0000,$01bb,$01be -dw $01bf,$01c2,$01ca,$01d2,$01d9,$01da,$01dd,$01e3,$01e6,$01e7,$0000,$01ec,$01ed,$0000,$01f0,$0000 -dw $01f1,$01f3,$01f7,$0000,$0000,$01f8,$01fa,$0000,$01fd,$0200,$0203,$0204,$0206,$0000,$0000,$0000 -dw $0207 - - -org $279E00 -SpiralOffset: -; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler -db $00,$01,$02,$00,$03,$00,$00,$04,$00,$05,$07,$00,$08,$00,$0b,$00 -db $00,$0c,$00,$00,$00,$0d,$0e,$0f,$00,$00,$11,$00,$13,$14,$15,$00 -db $00,$00,$00,$00,$00,$00,$16,$19,$1b,$00,$00,$00,$00,$00,$00,$00 -db $00,$1c,$00,$00,$1f,$00,$00,$00,$20,$00,$21,$00,$00,$00,$00,$22 -db $23,$24,$25,$00,$00,$26,$00,$00,$00,$00,$27,$00,$29,$2a,$2b,$00 -db $00,$00,$00,$2c,$2d,$00,$00,$00,$00,$00,$00,$00,$2e,$2f,$00,$30 -db $00,$00,$00,$35,$36,$00,$37,$00,$00,$00,$38,$3a,$3b,$00,$3c,$00 -db $3d,$40,$41,$00,$00,$00,$42,$45,$00,$00,$00,$00,$00,$00,$00,$49 -db $4a,$00,$00,$00,$00,$00,$00,$4b,$00,$00,$00,$00,$4f,$00,$53,$00 -db $00,$54,$00,$55,$00,$00,$00,$56,$57,$58,$00,$00,$00,$00,$59,$00 -db $5a,$00,$5b,$00,$00,$5c,$5d,$00,$00,$00,$00,$5e,$00,$00,$5f,$00 -db $60,$00,$00,$00,$00,$63,$64,$00,$00,$00,$00,$00,$65,$00,$66,$00 -db $67,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $6a,$6d,$6e,$00,$00,$00,$00,$00,$00,$00,$6f,$00,$00,$00,$00,$00 -db $70 - -org $279F00 -DoorOffset: -db $00,$01,$02,$00,$03,$00,$04,$00,$00,$00,$00,$00,$9A,$05,$99,$00 -db $00,$06,$07,$08,$09,$0A,$0B,$00,$00,$0C,$0D,$0E,$00,$0F,$10,$11 -db $12,$13,$14,$15,$16,$00,$17,$00,$98,$00,$18,$19,$00,$00,$1A,$00 -db $1B,$00,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$25,$00,$26,$27,$00 -db $96,$28,$97,$29,$2A,$2B,$2C,$00,$00,$2D,$2E,$2F,$30,$31,$32,$00 -db $33,$34,$35,$36,$00,$00,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F,$40 -db $41,$42,$43,$A0,$00,$00,$44,$45,$46,$00,$47,$48,$49,$4A,$4B,$00 -; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler -db $00,$4C,$00,$00,$00,$4D,$4E,$9E,$00,$00,$00,$4F,$50,$51,$52,$53 -db $00,$54,$00,$9C,$9D,$55,$00,$00,$00,$00,$00,$56,$57,$58,$59,$00 -db $5A,$5B,$5C,$5D,$00,$5E,$5F,$00,$9B,$60,$00,$61,$62,$63,$64,$65 -db $66,$67,$68,$69,$6A,$6B,$00,$00,$6C,$6D,$6E,$6F,$70,$00,$71,$72 -db $00,$73,$74,$75,$76,$77,$78,$79,$7A,$7B,$7C,$7D,$7E,$00,$7F,$80 -db $00,$81,$82,$83,$84,$85,$86,$87,$88,$89,$00,$8A,$8B,$00,$8C,$00 -db $00,$8D,$8E,$00,$00,$8F,$90,$00,$91,$92,$93,$94,$95,$00,$00,$00 -db $9f - -org $27A000 -DoorTable: -;; NW 00 N 01 NE 02 WN 00 W 01 WS 02 SW 00 S 01 SE 02 EN 00 E 01 ES 02 - Door ruler -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Default/Garbage row -dw $0003, $0003, $0003, $0450, $0003, $0003, $0003, $0003, $0003, $0452, $0003, $0003 ; HC Back Hall (x01) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sewer Switches (x02) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Crystaroller -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Arghus -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Aga 2 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sewer Secret Room -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sanc -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Pokey -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Lava Pipe -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Pipes n Ledge -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swap Canal -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod dark Maze -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod Bridge -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod Eye Statue -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Pre Aga -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Cross -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice BK -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x20 Aga1 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sewer Key Rat -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sewer Waters -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Eye Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Chest Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp Statue -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; PoD Arena (x2a) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; PoD Statue (x2b) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Compass -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x30 Aga's Altar -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Dark Cross -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Lanmolas -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp West Wing -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Flooded Key -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp Main Hub (x36) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp Hammer Time -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp First Basement -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Drop to the Moth -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod 3 Catwalks -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod Conveyor -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Minihelma -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Conveyor -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sewers -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert Torches -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT Big Chest -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT Cellblock -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp Compass Loop -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Skull3 Torches -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Pod Mimics 1 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Conveyor Ice -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Moldorm -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; IPBJ -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0401, $0003, $0003 ; HC West Hall (x50) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC Throne Room (x51) -dw $0003, $0003, $0003, $0401, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC East Hall (x52) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert Tiles 1 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Skull 2 Left Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Skull 2 Right Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Skull 1 Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Skull 3 Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Helmasaur -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Spike Switch -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Cannonball -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Gauntlet 1 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Choice Cross -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Iced U -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC West Lobby (x60) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC Main Lobby (x61) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC East Lobby (x62) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x66 Swamp Waterfall -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x67 Skull 1 Left Drop -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x68 Skull 1 Pinball -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x6a Pod Rupees -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x6b GT Mimics -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x6c GT Lanmolas -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x6d Gauntlet 2 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; x6e Ice Gators -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC Armory -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert BK Chest -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp Flooded Chests -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT DM's Tile -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Randoroom -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Warp Maze -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Freezors -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Hookpit -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; HC Catawalk -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert Right Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Left -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Hopeful Torch -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Right -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Lonely Freezor -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Vitreous (x90) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Rain -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Dark Crystals -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Blockswitch -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Fallbridge -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Torch Cross -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Darkness -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Warp Maze 2 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Invis Bridge -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Compass Room -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Big Chests -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Icy Pots -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Pre-Vitreous (xa0) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Fishbone -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Bridges -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Corner -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Trinexx (xa4) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Wizzrobes -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Compass (xa8) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Courtyard (xa9) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Map (xaa) -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT Switch -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Blind -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Iced T -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Slipway -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Warpzone -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire ???? -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Spikes -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Refill -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Dark Maze -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Chainchomp -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Rollers -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Big Key -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Easter Cannonball -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Dark Circle -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT Hellway -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT Bossway -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Blockswitch -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Backtracker -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Tiles -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Main Hub -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Big Chest -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Switch Maze -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Narrow -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Early Hub -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Floating Torches -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Armos -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT NW Quad -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT NE Quad -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Boss Drop -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire BK -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire 2 -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Laser Bridge -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TR Main Entrance -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Eyegores -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Attic Switches -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Eastern Attic Start -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT Entrance Quad -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; TT SE Quad -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Aga 6F -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Sewers Rope -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Swamp Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Ice Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; GT Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Mire Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert West Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert Main Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Hera Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Tower Lobby -dw $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003, $0003 ; Desert Back Lobby -; this should end at 27AF18 about (160 * 24 bytes = 3840 or F18) -; some values you can hardcode for spirals -;dw $0070, $36a0 ; ->HC Stairwell -;dw $0072, $4ff8 ; ->HC Map Room -;dw $0080, $1f50 ; ->zelda's cellblock - -org $27B000 -SpiralTable: ;113 4 byte entries - should end at 27B1C4 -dw $0203, $8080 ;null row -dw $0203, $8080 ;HC Backhallway -dw $0203, $8080 ;Sewer Pull -dw $0203, $8080 ;Crystaroller -dw $0203, $8080 ;Moldorm -dw $0203, $8080, $0203, $8080 ;Pod Basement -dw $0203, $8080 ;Pod Stalfos -dw $0203, $8080, $0203, $8080, $0203, $8080 ;GT Entrance -dw $0203, $8080 ;Ice Entrance -dw $0203, $8080 ;Escape -dw $0203, $8080 ;TR Pipe Ledge -dw $0203, $8080 ;Swamp Way -dw $0203, $8080, $0203, $8080 ;Hera Fallplace -dw $0203, $8080, $0203, $8080 ;PoD Bridge -dw $0203, $8080 ;GT Ice -dw $0203, $8080 ;GT F8 -dw $0203, $8080 ;Ice Cross -dw $0203, $8080, $0203, $8080, $0203, $8080 ;Swamp Statue -dw $0203, $8080, $0203, $8080 ;Hera Big -dw $0203, $8080 ;Swamp Ent -dw $0203, $8080, $0203, $8080, $0203, $8080 ;Hera Startiles (middle value unused) -dw $0203, $8080 ;West Swamp -dw $0203, $8080 ;Swamp Basement -dw $0203, $8080 ;Pod Drops -dw $0203, $8080 ;Ice Hammer -dw $0203, $8080 ;Aga Guards -dw $0203, $8080 ;Sewer Begin -dw $0203, $8080 ;Sewer Rope -dw $0203, $8080 ;TT Cellblock -dw $0203, $8080, $0203, $8080 ;Pod Entrance -dw $0203, $8080 ;GT Icespike -dw $0203, $8080 ;GT Moldorm -dw $0203, $8080 ;IPBJ -dw $0203, $8080 ;Desert Prep -dw $0203, $8080 ;Swamp Attic -dw $0203, $8080 ;GT Cannonball -dw $0203, $8080 ;GT Gauntlet1 -dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;Ice U (1st three values unused) -dw $0203, $8080 ;Desert Back -dw $0203, $8080 ;TT Attic L -dw $0203, $8080 ;Swamp Waterf -dw $0203, $8080 ;Pod Rupees -dw $0203, $8080 ;Pod Rupees -dw $0203, $8080 ;GT Mimics -dw $0203, $8080 ;GT Lanmo -dw $0203, $8080 ;Ice Gators -dw $0203, $8080, $0203, $8080, $0203, $8080 ;HC Tiny (first value placeholder) -dw $0203, $8080 ;HC Boomer -dw $0203, $8080 ;HC Pits1 -dw $0203, $8080, $0203, $8080, $0203, $8080 ;Swamp Sunken -dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;Hera Entrance (first value unused) -dw $0203, $8080 ;Ice Hookshot -dw $0203, $8080 ;HC Cellblock -dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;Hera Basement (first and third values unused) -dw $0203, $8080, $0203, $8080, $0203, $8080, $0203, $8080 ;GT Circle (third value unused) -dw $0203, $8080 ;Ice Last Freeze -dw $0203, $8080 ;Mire Drops -dw $0203, $8080 ;Mire Block -dw $0203, $8080 ;Mire Attic -dw $0203, $8080 ;Mire Entrance -dw $0203, $8080 ;East Dark -dw $0203, $8080 ;Ice Big -dw $0203, $8080 ;Mire Previtreous -dw $0203, $8080 ;Mire Bridges -dw $0203, $8080 ;GT Wizzrobes -dw $0203, $8080 ;GT Spikepit -dw $0203, $8080 ;TT Switch -dw $0203, $8080 ;Ice T -dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Usains (2nd value unused) -dw $0203, $8080 ;TR PlatMaze -dw $0203, $8080 ;TR Chainchomp -dw $0203, $8080 ;TT Bossway -dw $0203, $8080 ;Ice FallZone -dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Dark2 (2nd value unused) -dw $0203, $8080, $0203, $8080, $0203, $8080 ;Tower Dark1 (2nd value unused) -dw $0203, $8080 ;Mire BK Thang -dw $0203, $8080 ;Mire2 -dw $0203, $8080 ;East Attic Start -dw $0203, $8080 ;Tower Entrance - - -org $27C000 ;ends around 27C418 -PairedDoorTable: -dw $0000 ; the bad template -dw $0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000 -dw $0000 -dw $0000 -dw $0000,$0000,$0000 -dw $0000 -dw $0000 -dw $0000,$0000,$0000 - -dw $0000,$0000,$8021 -dw $0000,$0000,$0000,$0000 -dw $4014,$0000 -dw $8024,$8013,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000 -dw $0000,$0000,$0000,$0000 -dw $201a,$401a -dw $0000,$4019,$8019,$402a,$0000,$0000 -dw $0000,$0000 -dw $0000,$0000,$0000 -dw $0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000 - -dw $0000 -dw $2011,$0000,$0000 -dw $8032,$0000 -dw $0000,$0000 -dw $8014,$0000,$0000,$0000,$0000,$0000,$0000,$0000 -dw $4036,$0000,$0000,$0000 -dw $0000,$0000 -dw $0000,$101a,$402b,$0000,$0000,$0000 -dw $0000,$202a,$0000,$0000 -dw $0000 - -dw $0000,$0000 -dw $0000,$0000 -dw $8022 -dw $0000 -dw $0000,$0000 -dw $2036,$0000,$0000,$0000,$0000,$0000 -dw $8037,$8026,$8035,$0000,$0000,$0000 -dw $8036,$8038,$0000,$4038,$0000,$0000 -dw $4037,$1037 -dw $0000,$0000 -dw $204a,$0000,$0000 -dw $0000 -dw $0000,$0000,$804d,$0000 -dw $0000,$404e -dw $0000 - -dw $0000 -dw $0000 -dw $0000,$0000,$2053 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$8059,$0000 -dw $0000,$0000,$803a,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000 -dw $203d,$0000 -dw $0000,$403e -dw $0000 ; this is the odd extra room - shouldn't be used - -dw $0000,$0000 -dw $0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$2043 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000,$4058,$0000,$0000,$0000 -dw $0000,$2057,$4068,$0000,$0000,$0000 -dw $2049,$0000,$0000,$0000 -dw $0000 -dw $806b,$0000 -dw $0000,$0000 -dw $0000,$0000,$0000 -dw $805f,$0000,$0000,$0000 -dw $805e - -dw $0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000 -dw $0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$2058 -dw $0000 -dw $805b,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000 - -dw $0000,$0000,$0000 -dw $0000 -dw $0000,$0000,$0000 -dw $0000,$0000 -dw $0000,$0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000 -dw $0000,$207c,$0000 -dw $0000,$407d,$407b,$0000 -dw $0000,$407c,$0000 -dw $808e,$0000,$0000 -dw $0000,$0000 - -dw $0000 -dw $0000,$0000,$0000 -dw $0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000 -dw $0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000 -dw $807e - -dw $0000 -dw $0000 -dw $0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000 -dw $0000,$0000 -dw $0000,$0000 -dw $0000 -dw $0000,$20a9,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$0000,$0000 -dw $0000,$0000 - -dw $0000 -dw $40b1,$0000 -dw $80b2,$0000,$0000,$0000 -dw $0000,$0000 -dw $0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$80b8,$0000,$0000,$0000 -dw $0000,$0000,$4099,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000 -dw $0000 -dw $0000 -dw $0000,$0000 - -dw $0000,$0000,$0000 -dw $0000,$80a1,$0000,$0000 -dw $80a2,$0000,$0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000 -dw $0000 -dw $0000 -dw $0000,$0000,$80c6,$0000,$0000 -dw $0000 -dw $20a8,$0000 -dw $80ba,$0000,$0000,$0000 -dw $80b9,$0000,$0000 -dw $0000,$0000,$0000,$0000,$0000,$0000 -dw $0000,$80cc,$0000,$40cc,$0000,$0000,$0000,$0000 -dw $0000,$80bf,$0000 -dw $40be - -dw $0000,$0000,$0000 -dw $0000,$40c2,$0000,$0000,$0000,$0000,$0000,$0000 -dw $80c3,$40c1,$0000,$0000,$0000,$0000,$0000,$0000 -dw $80c2,$0000,$0000,$0000,$0000,$0000,$0000 -dw $80c5 -dw $80c4,$0000,$0000 -dw $20b6,$0000,$0000,$0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000 -dw $0000,$0000,$0000,$0000,$0000 -dw $20cc -dw $40bc,$10bc,$80cb -dw $0000 - -dw $0000,$0000 -dw $0000,$0000,$0000,$0000 -dw $0000 -dw $0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000,$0000,$0000 -dw $0000 -dw $0000,$0000 -dw $0000 -dw $0000,$0000,$0000,$0000 -dw $ffff ; indicates the end - we can drop this - -; Edge Transition Table (Target Room, Flags, MultiDiv ratio for edges) -org $27C500 ;ends around 27C5F(9) 4 bytes would be 27C649 -;I kind of want to split the 3rd byte into two -NorthOpenEdge: -db $00,$80,$11, $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -SouthOpenEdge: -db $00,$80,$11, $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -WestOpenEdge: -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -EastOpenEdge: -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -db $00,$80,$11, $00,$80,$11, $00,$80,$11 -; Edge Info Table (Midpoint, Width, Min Coord) -; I kind of want to add a fourth byte to help indicate quadrant info on min coord -NorthEdgeInfo: -db $a8,$10,$a0, $2c,$08,$28 ;HC -db $b8,$20,$a8 ; DP West Wing -db $38,$20,$28, $f8,$a0,$a8, $b8,$20,$a8 ; DP Main -db $78,$20,$68 ; DP East Wing -db $f8,$10,$f0, $7c,$18,$70 ; TT Lobby -db $74,$18,$68, $f8,$10,$f0 ; TT Compass -SouthEdgeInfo: -db $a8,$10,$a0, $2c,$08,$28 ; HC -db $b8,$20,$a8 ; DP Sandworm -db $38,$20,$28, $f8,$a0,$a8, $b8,$20,$a8 ; DP North Hall & Dead End -db $78,$20,$68 ; DP Arrow Pot -db $f8,$10,$f0, $7c,$18,$70 ; TT Ambush -db $74,$18,$68, $f8,$10,$f0 ; TT BK Corner -WestEdgeInfo: -db $78,$30,$60 ; TT Attic -db $40,$20,$30 ; DP North Hall -db $40,$20,$30 ; DP Arrow Pot -db $84,$18,$78, $68,$10,$60 ; HC South -db $a0,$a0,$50 ; DP East Wing -db $58,$50,$30, $98,$50,$70 ; TT BK Corner -db $58,$50,$30 ; TT Compass -EastEdgeInfo: -db $78,$30,$60 ; TT Attic -db $40,$20,$30 ; DP Sandworm -db $40,$20,$30 ; DP North Hall -db $68,$10,$60, $84,$18,$78 ; HC Guards -db $a0,$a0,$50 ; DP Main Lobby -db $58,$50,$30, $98,$50,$70 ; TT Ambush -db $58,$50,$30 ; TT Nook -MultDivInfo: ; (1, 2, 3, 4, 5, 6, 10, 20) -db $01, $02, $03, $04, $05, $06, $0a, $14 -; indices: 0-7 - -; In-room stairs in North/South pairs. From left to right: -; PoD, IP right side, IP Freezor chest and GT -org $27C700 -InroomStairsTable: -dw $0003,$0003, $0003,$0003, $0003,$0003, $0003,$0003 - -org $27C720 -InroomStairsRoom: -db $0B,$1B, $3F,$1F, $7E,$5E, $96,$3D -InroomStairsX: -dw $0190, $0160, $0040, $0178 -InroomStairsY: -dw $0058, $0148, $0198, $0190 - - -org $27E000 -CutoffRooms: -; TT Alcove, Mire Bridge Left & Right, Mire Bent Bridge, Mire Hub -; Pod Falling & Harmless, SW Star Pits, TR Lava Escape & TR Dual Pipes, Bob's Room & GT Big Chest -dw $00bc, $00a2, $00a3, $00c2, $001a, $0049, $0014, $008c -; Ice Many Pots, Swamp Waterfall, GT Gauntlet 3, Eastern Push Block, Eastern Courtyard, Eastern Map Valley -; Eastern Cannonball, HC East Hall -dw $009f, $0066, $005d, $00a8, $00a9, $00aa, $00b9, $0052 -; HC West Hall, TR Dash Bridge, TR Hub, Pod Arena, GT Petting Zoo, Ice Spike Cross -dw $0050, $00c5, $00c6, $0009, $0003, $002a, $007d, $005e -; Sewer Drop, Mire Cross, GT Crystal Circles -dw $0011, $00b2, $003d -dw $ffff - -; dungeon tables -; HC HC EP DP AT SP PD MM SW IP TH TT TR GT -org $27f000 -CompassBossIndicator: -dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 -TotalKeys: ;27f020 -db $04, $04, $02, $04, $04, $06, $06, $06, $05, $06, $01, $03, $06, $08, $00, $00 -ChestKeys: ;27f030 -db $01, $01, $00, $01, $02, $01, $06, $03, $03, $02, $01, $01, $04, $04, $00, $00 -BigKeyStatus: ;27f040 (status 2 indicate BnC guard) -dw $0002, $0002, $0001, $0001, $0000, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0001, $0000, $0000 -DungeonReminderTable: ;27f060 -dw $2D50, $2D50, $2D51, $2D52, $2D54, $2D56, $2D55, $2D5A, $2D57, $2D59, $2D53, $2D58, $2D5B, $2D5C, $0000, $0000 -TotalLocationsLow: ;27f080 -db $08, $08, $06, $06, $02, $00, $04, $08, $08, $08, $06, $08, $02, $07, $00, $00 -TotalLocationsHigh: ;27f090 -db $00, $00, $00, $00, $00, $01, $01, $00, $00, $00, $00, $00, $01, $02, $00, $00 -org $27f0a0 -TotalLocations: -db $08, $08, $06, $06, $02, $0a, $0e, $08, $08, $08, $06, $08, $0c, $1b, $00, $00 -; no more room here - -; Vert 0,6,0 Horz 2,0,8 -org $27f0b0 -CoordIndex: ; Horizontal 1st -db 2, 0 ; Coordinate Index $20-$23 -OppCoordIndex: -db 0, 2 ; Swapped coordinate Index $20-$23 (minor optimization) -CameraIndex: ; Horizontal 1st -db 0, 6 ; Camera Index $e2-$ea -CamQuadIndex: ; Horizontal 1st -db 8, 0 ; Camera quadrants $600-$60f -ShiftQuadIndex: -db 2, 1 ; see ShiftQuad func (relates to $a9,$aa) -CamBoundIndex: ; Horizontal 1st -db 0, 4 ; Camera Bounds $0618-$61f -OppCamBoundIndex: ; Horizontal 1st -db 4, 0 ; Camera Bounds $0618-$61f -CamBoundBaseLine: ; X camera stuff is 1st column todo Y camera needs more testing -dw $007f, $0077 ; Left/Top camera bounds when at edge or layout frozen -dw $0007, $000b ; Left/Top camera bounds when not frozen + appropriate low byte $22/$20 (preadj. by #$78/#$6c) -dw $00ff, $010b ; Right/Bot camera bounds when not frozen + appropriate low byte $20/$22 -dw $017f, $0187 ; Right/Bot camera bound when at edge or layout frozen -;27f0ce next free byte - -org $27f0f0 -RemoveRainDoorsRoom: -dw $0060, $0062, $ffff ; ffff indicates end of list -RainDoorMatch: ; org $27f0f6 and f8 for now -dw $0081, $0061 ; not xba'd -BlockSanctuaryDoorInRain: ;27f0fa -dw $0000 - - -org $27f100 -TilesetTable: -; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler -db $13,$04,$04,$06,$0d,$ff,$08,$05,$06,$07,$07,$07,$0e,$0e,$0b,$ff -db $13,$04,$04,$0d,$0d,$0d,$08,$05,$06,$07,$07,$07,$0e,$0e,$0b,$0b -db $04,$04,$04,$0d,$0d,$ff,$08,$05,$08,$09,$07,$07,$06,$ff,$0b,$06 -db $04,$05,$04,$12,$08,$08,$08,$08,$08,$09,$07,$07,$06,$0e,$0b,$0b -db $04,$04,$04,$12,$0a,$0a,$08,$ff,$ff,$09,$07,$07,$0e,$0e,$0b,$0b -db $04,$04,$04,$12,$08,$01,$09,$09,$09,$09,$07,$0e,$0e,$0e,$0b,$0b -db $04,$04,$04,$12,$0a,$0a,$08,$09,$09,$ff,$07,$0e,$0e,$0e,$0b,$ff -db $04,$04,$04,$12,$12,$12,$08,$05,$ff,$ff,$ff,$0e,$0e,$0e,$0b,$0b -db $04,$04,$04,$12,$12,$12,$ff,$05,$ff,$05,$ff,$0e,$0e,$0e,$0b,$ff -db $0c,$0c,$0c,$0c,$ff,$0e,$0e,$0c,$0c,$05,$ff,$0e,$0e,$0e,$0b,$0b -db $0c,$0c,$0c,$0c,$0d,$0e,$0e,$05,$05,$05,$05,$0a,$0a,$ff,$0b,$0b -db $04,$0c,$0c,$0c,$0d,$0d,$0d,$0d,$05,$05,$05,$0a,$0a,$ff,$0b,$0b -db $04,$0c,$0c,$0c,$0d,$0d,$0d,$0d,$05,$05,$ff,$0a,$0a,$ff,$0b,$ff -db $04,$0c,$0c,$ff,$ff,$0d,$0d,$ff,$05,$05,$05,$0a,$0a,$ff,$0b,$06 -db $04,$06,$06,$06,$06,$06,$06,$06,$06,$ff,$06,$06,$ff,$06,$06,$06 -db $06,$06,$03,$03,$03,$03,$ff,$ff,$06,$06,$06,$06,$ff,$06,$06,$06 - -;27f200 -PaletteTable: -db $21,$00,$00,$07,$00,$08,$00,$00,$07,$00,$00,$00,$00,$00,$00,$21 -db $21,$00,$00,$00,$00,$00,$00,$00,$07,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$0e,$00,$00,$07,$00,$00,$07 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$13 -db $00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -; 0 1 2 3 4 5 6 7 8 9 a b c d e f --Offset Ruler -db $00,$00,$00,$00,$00,$00,$00,$06,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$14,$20 -db $00,$07,$20,$20,$07,$07,$07,$07,$07,$20,$20,$07,$20,$20,$20,$20 -db $07,$07,$02,$02,$02,$02,$07,$07,$07,$20,$20,$07,$20,$20,$20,$07 - -;27f300 -DungeonTilesets: -db $04,$04,$05,$12,$04,$08,$07,$0C,$09,$0B,$05,$0A,$0D,$0E,$06,$06 - -; -;org $27ff00 - -org $27fff0 -LinksHouseDarkWorld: -dw $ffff -SanctuaryDarkWorld: -dw $ffff -OldManDarkWorld: -dw $ffff \ No newline at end of file diff --git a/asm/dr_lobby.asm b/asm/dr_lobby.asm deleted file mode 100644 index 15ee435c..00000000 --- a/asm/dr_lobby.asm +++ /dev/null @@ -1,10 +0,0 @@ -CheckDarkWorldSpawn: - STA $A0 : STA $048E ; what we wrote over - LDA.l DRFlags : AND #$0200 : BEQ + ; skip if the flag isn't set - LDA.l $7EF357 : AND #$00FF : BNE + ; moon pearl? - LDA.l LinksHouseDarkWorld : CMP $A0 : BEQ ++ - LDA.l SanctuaryDarkWorld : CMP $A0 : BEQ ++ - LDA.l OldManDarkWorld : CMP $A0 : BNE + - ++ SEP #$30 : LDA #$17 : STA $5D - INC $02E0 : LDA.b #$40 : STA !DARK_WORLD : REP #$30 -+ RTL diff --git a/asm/drhooks.asm b/asm/drhooks.asm deleted file mode 100644 index e8c48b90..00000000 --- a/asm/drhooks.asm +++ /dev/null @@ -1,221 +0,0 @@ -org $02b5c4 ; -- moving right routine 135c4 -jsl WarpRight -org $02b665 ; -- moving left routine -jsl WarpLeft -org $02b713 ; -- moving down routine -jsl WarpDown -org $02b7b4 ; -- moving up routine -jsl WarpUp -org $02bd80 -jsl AdjustTransition -nop - -;turn off linking doors -- see .notRoomLinkDoor label in Bank02.asm -org $02b5a8 ; <- 135a8 - Bank02.asm : 8368 (LDA $7EC004 : STA $A0) -jsl CheckLinkDoorR -bcc NotLinkDoor1 -org $02b5b6 -NotLinkDoor1: -org $02b649 ; <- 135a8 - Bank02.asm : 8482 (LDA $7EC004 : STA $A0) -jsl CheckLinkDoorL -bcc NotLinkDoor2 -org $02b657 -NotLinkDoor2: - - -; Staircase routine -org $01c3d4 ; <- c3d4 - Bank01.asm : 9762-4 (Dungeon_DetectStaircase-> STA $A0 : LDA $063D, X) -jsl RecordStairType : nop -org $02a1e7 ;(PC: 121e7) -jsl SpiralWarp - -org $0291b3 ; <- Bank02.asm : 3303 (LDA $0462 : AND.b #$04) -jsl SpiralPriorityHack : nop -org $0290f9 ; <- Bank02.asm : 3188 (LDA $0462 : AND.b #$04) -jsl SpiralPriorityHack : nop - -org $029369 ; <- 11369 - Bank02.asm : 3610 (STX $0464 : STY $012E) -jsl StraightStairsAdj : nop #2 -org $029383 ; <- 11384 - Bank02.asm : 3629 (.walkingDownStaircase-> ADD $20 : STA $20) -jsl StraightStairsFix : nop -org $0293aa ; <- 113aa - Bank02.asm : 3653 (ADD $20 : STA $20) -jsl StraightStairsFix : nop -org $0293d1 ; <- 113d1 - Bank02.asm : 3683 (ADD $20 : STA $20 BRANCH_IOTA) -jsl StraightStairsFix : nop -org $029396 ; <- 11396 - Bank02.asm : 3641 (LDA $01C322, X) -jsl StraightStairLayerFix -org $02c06d ; <- Bank02.asm : 9874 (LDX $0418, CMP.b #$02) -jsl DoorToStraight : nop -org $02c092 ; STA $0020, Y : LDX #$00 -jsl DoorToInroom : nop -org $02c0f8 ; CMP $02C034, X -jsl DoorToInroomEnd -org $02941a ; <- Bank02.asm : 3748 module 7.12.11 (LDA $0464 : BNE BRANCH_$11513 : INC $B0 : RTS) -jsl StraightStairsTrapDoor : rts -org $028b54 ; <- Bank02.asm : 2200 (JSL UseImplicitRegIndexedLocalJumpTable) -jsl InroomStairsTrapDoor - -org $0289a0 ; JSL $0091C4 -jsl QuadrantLoadOrderBeforeScroll -org $02bd9c ; JSL $0091C4 -jsl QuadrantLoadOrderAfterScroll - - -; Graphics fix -org $02895d ; Bank 02 line 1812 (JSL Dungeon_LoadRoom : JSL Dungeon_InitStarTileChr : JSL $00D6F9 : INC $B0) -Splicer: -jsl GfxFixer -lda $b1 : beq .done -rts -nop #5 -.done - -org $01b618 ; Bank01.asm : 7963 Dungeon_LoadHeader (REP #$20 : INY : LDA [$0D], Y) -nop : jsl OverridePaletteHeader - -org $02817e ; Bank02.asm : 414 (LDA $02811E, X) -jsl FixAnimatedTiles - -org $0aef43 ; UnderworldMap_RecoverGFX -jsl FixCloseDungeonMap - -org $028a06 ; Bank02.asm : 1941 Dungeon_ResetTorchBackgroundAndPlayer -JSL FixWallmasterLamp - -org $00d377 ;Bank 00 line 3185 -DecompDungAnimatedTiles: -org $00fda4 ;Bank 00 line 8882 -Dungeon_InitStarTileCh: -org $00d6ae ;(PC: 56ae) -LoadTransAuxGfx: -org $00d739 ; -LoadTransAuxGfx_Alt: -org $00df5a ;(PC: 5f5a) -PrepTransAuxGfx: -org $0ffd65 ;(PC: 07fd65) -Dungeon_LoadCustomTileAttr: -org $01feb0 -Dungeon_ApproachFixedColor: -;org $01fec1 -;Dungeon_ApproachFixedColor_variable: -;org $a0f972 ; Rando version -;LoadRoomHook: -org $1bee74 ;(PC: 0dee74) -Palette_DungBgMain: -org $1bec77 -Palette_SpriteAux3: -org $1becc5 -Palette_SpriteAux2: -org $1bece4 -Palette_SpriteAux1: - - -org $0DFA53 -jsl.l LampCheckOverride -org $028046 ; <- 10046 - Bank02.asm : 217 (JSL EnableForceBlank) (Start of Module_LoadFile) -jsl.l OnFileLoadOverride -org $07A93F ; < 3A93F - Bank07.asm 6548 (LDA $8A : AND.b #$40 - Mirror checks) -jsl.l MirrorCheckOverride - -org $05ef47 -Sprite_HeartContainer_Override: ;sprite_heart_upgrades.asm : 96-100 (LDA $040C : CMP.b #$1A : BNE .not_in_ganons_tower) -jsl GtBossHeartCheckOverride : bcs .not_in_ganons_tower -nop : stz $0dd0, X : rts -.not_in_ganons_tower - - -org $07a955 ; <- Bank07.asm : around 6564 (JP is a bit different) (STZ $05FC : STZ $05FD) -jsl BlockEraseFix -nop #2 - -org $02A0A8 -Mirror_SaveRoomData: -org $07A95B ; < bank_07.asm ; #_07A95B: JSL Mirror_SaveRoomData -jsl EGFixOnMirror - -org $02b82a -jsl FixShopCode - -org $1ddeea ; <- Bank1D.asm : 286 (JSL Sprite_LoadProperties) -jsl VitreousKeyReset - -org $1ed024 ; f5024 sprite_guruguru_bar.asm : 27 (LDA $040C : CMP.b #$12 : INY #2 -jsl GuruguruFix : bra .next -nop #3 -.next - -org $028fc9 -nop #2 : jsl BlindAtticFix - -org $028409 -jsl SuctionOverworldFix - -org $0ded04 ; <- rando's hooks.asm line 2192 - 6ED04 - equipment.asm : 1963 (REP #$30) -jsl DrHudDungeonItemsAdditions -;org $098638 ; rando's hooks.asm line 2192 -;jsl CountChestKeys -org $06D192 ; rando's hooks.asm line 457 -jsl CountAbsorbedKeys -; rando's hooks.asm line 1020 -;org $05FC7E ; <- 2FC7E - sprite_dash_item.asm : 118 (LDA $7EF36F : INC A : STA $7EF36F) -;jsl CountBonkItem - -org $019dbd ; <- Bank01.asm : 4465 of Object_Draw8xN (LDA $9B52, Y : STA $7E2000, X) -jsl CutoffEntranceRug : bra .nextTile : nop -.nextTile - -;maybe set 02e2 to 0 - -org $0799de ; <- Bank07.asm : 4088 (LDA.b #$15 : STA $5D) -JSL StoreTempBunnyState -; -org $08c450 ; <- ancilla_receive_item.asm : 146-148 (STY $5D : STZ $02D8) -JSL RetrieveBunnyState : NOP - -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 : BCC + : RTS : NOP : + - -org $1edabf ; <- sprite_energy_ball.asm : 86-7 Sprite_EnergyBall (LDA.b #$10 : LDX.b #$00) -JSL StandardAgaDmg - - -org $09a681 ; < - similar to talalong.asm : 1157 (JSL Main_ShowTextMessage) -JSL BlindsAtticHint : NOP #2 -org $1cfd69 -Main_ShowTextMessage: - -; Conditionally disable UW music changes in Door Rando -org $028ADB ; <- Bank02.asm:2088-2095 (LDX.b #$14 : LDA $A0 ...) -JSL.l Underworld_DoorDown_Entry : CPX #$FF -BEQ + : db $80, $1C ; BRA $028B04 -NOP #6 : + - -org $02C3F2 ; <- Bank02.asm:10521 Unused call -Underworld_DoorDown_Call: -org $02C3F3 -dw $8AD9 ; address of Bank02.asm:2085 - -; These two, if enabled together, have implications for vanilla BK doors in IP/Hera/Mire -; IPBJ is common enough to consider not doing this. Mire is not a concern for vanilla - maybe glitched modes -; Hera BK door back can be seen with Pot clipping - likely useful for no logic seeds - -;Kill big key (1e) check for south doors -;org $1aa90 -;DontCheck: -;bra .done -;nop #3 -;.done - -;Enable south facing bk graphic -;org $4e24 -;dw $2ac8 - -org $01b714 ; PC: b714 -OpenableDoors: -jsl CheckIfDoorsOpen -bcs .normal -rts -.normal diff --git a/asm/edges.asm b/asm/edges.asm deleted file mode 100644 index 58852b12..00000000 --- a/asm/edges.asm +++ /dev/null @@ -1,299 +0,0 @@ -HorzEdge: - cpy #$ff : beq + - jsr DetectWestEdge : ldy #$02 : bra ++ - + jsr DetectEastEdge - ++ cmp #$ff : beq + - sta $00 : asl : !add $00 : tax - cpy #$ff : beq ++ - jsr LoadWestData : bra .main - ++ jsr LoadEastData - .main - jsr LoadEdgeRoomHorz - sec : rts - + clc : rts - -VertEdge: - cpy #$ff : beq + - jsr DetectNorthEdge : bra ++ - + jsr DetectSouthEdge - ++ cmp #$ff : beq + - sta $00 : asl : !add $00 : tax - cpy #$ff : beq ++ - jsr LoadNorthData : bra .main - ++ jsr LoadSouthData - .main - jsr LoadEdgeRoomVert - sec : rts - + clc : rts - -LoadEdgeRoomHorz: - lda $03 : sta $a0 - sty $06 - and.b #$0f : asl a : !sub $23 : !add $06 : sta $02 - ldy #$00 : jsr ShiftVariablesMainDir - - lda $04 : and #$80 : bne .edge - lda $04 : sta $01 ; load up flags in $01 - jsr PrepScrollToNormal - bra .scroll - - .edge - lda $04 : and #$10 : beq + - lda #$01 - + sta $ee ; layer stuff - - jsr MathHorz - - .scroll - jsr ScrollY - rts - -LoadEdgeRoomVert: - lda $03 : sta $a0 - sty $06 - and.b #$f0 : lsr #3 : !sub $21 : !add $06 : sta $02 - - lda $04 : and #$80 : bne .edge - lda $04 : sta $01 ; load up flags in $01 - and #$03 : cmp #$03 : beq .inroom - ldy #$01 : jsr ShiftVariablesMainDir - jsr PrepScrollToNormal - bra .scroll - - .inroom - jsr ScrollToInroomStairs - rts - - .edge - ldy #$01 : jsr ShiftVariablesMainDir - lda $04 : and #$10 : beq + - lda #$01 - + sta $ee ; layer stuff - - jsr MathVert - lda $03 - - .scroll - jsr ScrollX - rts - - -MathHorz: - jsr MathStart : lda $20 - jsr MathMid : and #$0040 - jsr MathEnd - rts - -MathVert: - jsr MathStart : lda $22 - jsr MathMid : and #$0020 - jsr MathEnd - rts - -MathStart: - rep #$30 - lda $08 : and #$00ff : sta $00 - rts - -MathMid: - and #$01ff : !sub $00 : and #$00ff : sta $00 - ; nothing should be bigger than $a0 at this point - - lda $05 : and #$00f0 : lsr #4 : tax - lda MultDivInfo, x : and #$00ff : tay - lda $00 : jsr MultiplyByY : sta $02 - - lda $07 : and #$00ff : jsr MultiplyByY : tax - - lda $05 : and #$000f : tay - lda MultDivInfo, y : and #$00ff : tay - lda $02 : jsr DivideByY : sta $00 - lda $0c : and #$00ff : sta $02 - lda $04 - rts - -MathEnd: - beq + - lda #$0100 - + !add $02 : !add $00 - sta $04 - sep #$30 - rts - -; don't need midpoint of edge Link is leaving (formerly in $06 - used by dir indicator) -; don't need width of edge Link is going to (currently in $0b) -LoadNorthData: - lda NorthOpenEdge, x : sta $03 : inx ; target room - lda NorthEdgeInfo, x : sta $07 ; needed for maths - (divide by 2 anyway) - lda NorthOpenEdge, x : sta $04 : inx ; bit field - lda NorthEdgeInfo, x : sta $08 ; needed for maths - lda NorthOpenEdge, x : sta $05 ; ratio - lda $04 : jsr LoadSouthMidpoint : inx ; needed now, and for nrml transition - lda SouthEdgeInfo, x : sta $0b : inx ; probably not needed todo: remove - lda SouthEdgeInfo, x : sta $0c ; needed for maths - rts - -LoadSouthMidpoint: - and #$0f : sta $00 : asl : !add $00 : tax - lda SouthEdgeInfo, x : sta $0a ; needed now, and for nrml transition - rts - -LoadSouthData: - lda SouthOpenEdge, x : sta $03 : inx - lda SouthEdgeInfo, x : sta $07 - lda SouthOpenEdge, x : sta $04 : inx - lda SouthEdgeInfo, x : sta $08 - lda SouthOpenEdge, x : sta $05 - lda $04 : jsr LoadNorthMidpoint : inx - lda NorthEdgeInfo, x : sta $0b : inx - lda NorthEdgeInfo, x : sta $0c - rts - -LoadNorthMidpoint: - and #$0f : sta $00 : asl : !add $00 : tax - lda NorthEdgeInfo, x : sta $0a ; needed now, and for nrml transition - rts - -LoadWestData: - lda WestOpenEdge, x : sta $03 : inx - lda WestEdgeInfo, x : sta $07 - lda WestOpenEdge, x : sta $04 : inx - lda WestEdgeInfo, x : sta $08 - lda WestOpenEdge, x : sta $05 - lda $04 : jsr LoadEastMidpoint : inx - lda EastEdgeInfo, x : sta $0b : inx - lda EastEdgeInfo, x : sta $0c - rts - -LoadEastMidpoint: - and #$0f : sta $00 : asl : !add $00 : tax - lda EastEdgeInfo, x : sta $0a ; needed now, and for nrml transition - rts - -LoadEastData: - lda EastOpenEdge, x : sta $03 : inx - lda EastEdgeInfo, x : sta $07 - lda EastOpenEdge, x : sta $04 : inx - lda EastEdgeInfo, x : sta $08 - lda EastOpenEdge, x : sta $05 - lda $04 : jsr LoadWestMidpoint : inx - lda WestEdgeInfo, x : sta $0b : inx - lda WestEdgeInfo, x : sta $0c - - -LoadWestMidpoint: - and #$0f : sta $00 : asl : !add $00 : tax - lda WestEdgeInfo, x : sta $0a ; needed now, and for nrml transition - rts - - -DetectNorthEdge: - ldx #$ff - lda $a2 - cmp #$82 : bne + - lda $22 : cmp #$50 : bcs ++ - ldx #$01 : bra .end - ++ ldx #$00 : bra .end - + cmp #$83 : bne + - ldx #$02 : bra .end - + cmp #$84 : bne + - lda $a9 : beq ++ - lda $22 : cmp #$78 : bcs +++ - ldx #$04 : bra .end - +++ ldx #$05 : bra .end - ++ lda $22 : cmp #$78 : bcs ++ - ldx #$03 : bra .end - ++ ldx #$04 : bra .end - + cmp #$85 : bne + - ldx #$06 : bra .end - + cmp #$db : bne + - lda $a9 : beq ++ - lda $22 : beq ++ - ldx #$08 : bra .end - ++ ldx #$07 : bra .end - + cmp #$dc : bne .end - lda $a9 : bne ++ - lda $22 : cmp #$b0 : bcs ++ - ldx #$09 : bra .end - ++ ldx #$0a - .end txa : rts - -DetectSouthEdge: - ldx #$ff - lda $a2 - cmp #$72 : bne + - lda $22 : cmp #$50 : bcs ++ - ldx #$01 : bra .end - ++ ldx #$00 : bra .end - + cmp #$73 : bne + - ldx #$02 : bra .end - + cmp #$74 : bne + - lda $a9 : beq ++ - lda $22 : cmp #$78 : bcs +++ - ldx #$04 : bra .end - +++ ldx #$05 : bra .end - ++ lda $22 : cmp #$78 : bcs ++ - ldx #$03 : bra .end - ++ ldx #$04 : bra .end - + cmp #$75 : bne + - ldx #$06 : bra .end - + cmp #$cb : bne + - lda $a9 : beq ++ - lda $22 : beq ++ - ldx #$08 : bra .end - ++ ldx #$07 : bra .end - + cmp #$cc : bne .end - lda $a9 : bne ++ - lda $22 : cmp #$b0 : bcs ++ - ldx #$09 : bra .end - ++ ldx #$0a - .end txa : rts - -DetectWestEdge: - ldx #$ff - lda $a2 - cmp #$65 : bne + - ldx #$00 : bra .end - + cmp #$74 : bne + - ldx #$01 : bra .end - + cmp #$75 : bne + - ldx #$02 : bra .end - + cmp #$82 : bne + - lda $aa : beq ++ - ldx #$03 : bra .end - ++ ldx #$04 : bra .end - + cmp #$85 : bne + - ldx #$05 : bra .end - + cmp #$cc : bne + - lda $aa : beq ++ - ldx #$06 : bra .end - ++ ldx #$07 : bra .end - + cmp #$dc : bne .end - ldx #$08 - .end txa : rts - -DetectEastEdge: - ldx #$ff - lda $a2 - cmp #$64 : bne + - ldx #$00 : bra .end - + cmp #$73 : bne + - ldx #$01 : bra .end - + cmp #$74 : bne + - ldx #$02 : bra .end - + cmp #$81 : bne + - lda $aa : beq ++ - ldx #$04 : bra .end - ++ ldx #$03 : bra .end - + cmp #$84 : bne + - ldx #$05 : bra .end - + cmp #$cb : bne + - lda $aa : beq ++ - ldx #$06 : bra .end - ++ ldx #$07 : bra .end - + cmp #$db : bne .end - ldx #$08 - .end txa : rts - - - diff --git a/asm/gfx.asm b/asm/gfx.asm deleted file mode 100644 index 94cb8848..00000000 --- a/asm/gfx.asm +++ /dev/null @@ -1,95 +0,0 @@ -GfxFixer: -{ - lda.l DRMode : bne + - jsl LoadRoomHook ;this is the code we overwrote - jsl Dungeon_InitStarTileCh - jsl LoadTransAuxGfx_Alt - inc $b0 - rtl - + lda $b1 : bne .stage2 - jsl LoadRoomHook ; this is the rando version - let's only call this guy once - may fix star tiles and slower loads - jsl Dungeon_InitStarTileCh - jsl LoadTransAuxGfx - jsl Dungeon_LoadCustomTileAttr - jsl PrepTransAuxGfx - lda.l DRMode : cmp #$02 : bne + ; only do this in crossed mode - ldx $a0 : lda.l TilesetTable, x - cmp $0aa1 : beq + ; already eq no need to decomp - sta $0aa1 - tax : lda $02802e, x : tay - jsl DecompDungAnimatedTiles - + - lda #$09 : sta $17 : sta $0710 - jsl Palette_SpriteAux3 - jsl Palette_SpriteAux2 - jsl Palette_SpriteAux1 - jsl Palette_DungBgMain - jsr CgramAuxToMain - inc $b1 - rtl - .stage2 - lda #$0a : sta $17 : sta $0710 - stz $b1 : inc $b0 - rtl -} - -FixAnimatedTiles: - LDA.L DRMode : CMP #$02 : BNE + - LDA $040C : CMP.b #$FF : BEQ + - PHX - LDX $A0 : LDA.l TilesetTable, x - CMP $0AA1 : beq ++ - TAX : PLA : BRA + - ++ - PLX - + LDA $02802E, X ; what we wrote over - RTL - -FixCloseDungeonMap: - LDA.l DRMode : CMP #$02 : BNE .vanilla - LDA $040C : BMI .vanilla - LSR : TAX - LDA.l DungeonTilesets,x - RTL - .vanilla - LDA $7EC20E - RTL - -FixWallmasterLamp: -ORA $0458 -STY $1C : STA $1D : RTL ; what we wrote over - - -CgramAuxToMain: ; ripped this from bank02 because it ended with rts -{ - rep #$20 - ldx.b #$00 - - .loop - lda $7EC300, X : sta $7EC500, x - lda $7EC340, x : sta $7EC540, x - lda $7EC380, x : sta $7EC580, x - lda $7EC3C0, x : sta $7EC5C0, x - lda $7EC400, x : sta $7EC600, x - lda $7EC440, x : sta $7EC640, x - lda $7EC480, x : sta $7EC680, x - lda $7EC4C0, x : sta $7EC6C0, x - - inx #2 : cpx.b #$40 : bne .loop - sep #$20 - - ; tell NMI to upload new CGRAM data - inc $15 - rts -} - -OverridePaletteHeader: - lda.l DRMode : cmp #$02 : bne + - lda.l DRFlags : and #$20 : bne + - cpx #$01c2 : !bge + - rep #$20 - txa : lsr : tax - lda.l PaletteTable, x - iny : rtl - + rep #$20 : iny : lda [$0D], Y ; what we wrote over -rtl \ No newline at end of file diff --git a/asm/hudadditions.asm b/asm/hudadditions.asm deleted file mode 100644 index 575e189f..00000000 --- a/asm/hudadditions.asm +++ /dev/null @@ -1,291 +0,0 @@ -DrHudOverride: -{ - jsl.l NewDrawHud - jsr HudAdditions - rtl -} - -HudAdditions: -{ - LDA.l DRFlags : AND #$0008 : BNE + : JMP .end_item_count : + - LDA.l $7EF423 : PHA : CMP #1000 : !BLT + - JSL HexToDec4Digit_fast - LDX.b $04 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS ; draw 1000's digit - BRA .skip - + JSL HexToDec_fast - .skip - LDA #$207F : STA !GOAL_DRAW_ADDRESS+2 : STA !GOAL_DRAW_ADDRESS+4 - PLA : PHA : CMP.w #100 : !BLT + - LDX.b $05 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit - + PLA : CMP.w #10 : !BLT + - LDX.b $06 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+4 ; draw 10's digit - + LDX.b $07 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+6 ; draw 1's digit - LDA.w #$2830 : STA !GOAL_DRAW_ADDRESS+8 ; draw slash - LDA.l DRFlags : AND #$0100 : BNE + - LDA.l $7EF33E : CMP #1000 : !BLT .three_digit_goal - JSL HexToDec4Digit_fast - LDX.b $04 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+10 ; draw 1000's digit - LDX.b $05 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+12 ; draw 100's digit - LDX.b $06 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+14 ; draw 10's digit - LDX.b $07 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+16 ; draw 1's digit - BRA .end_item_count - .three_digit_goal - JSL HexToDec_fast - LDX.b $05 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+10 ; draw 100's digit - LDX.b $06 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+12 ; draw 10's digit - LDX.b $07 : TXA : ORA.w #$2490 : STA !GOAL_DRAW_ADDRESS+14 ; draw 1's digit - BRA .end_item_count - + LDA.w #$2405 : STA !GOAL_DRAW_ADDRESS+10 : STA !GOAL_DRAW_ADDRESS+12 - STA !GOAL_DRAW_ADDRESS+14 : STA !GOAL_DRAW_ADDRESS+16 - .end_item_count - - LDX $1B : BNE + : RTS : + ; Skip if outdoors - ldx $040c : cpx #$ff : bne + : rts : + ; Skip if not in dungeon - lda.l DRMode : bne + : rts : + ; Skip if not door rando - phb : phk : plb - lda $7ef364 : and.l $0098c0, x : beq + - lda.w CompassBossIndicator, x : and #$00ff : cmp $a0 : bne + - lda $1a : and #$0010 : beq + - lda #$345e : sta $7ec790 : bra .next - + lda #$207f : sta $7ec790 - .next lda.w DRMode : and #$0002 : bne + : plb : rts : + - lda $7ef36d : and #$00ff : beq + - lda.w DungeonReminderTable, x : bra .reminder - + lda #$207f - .reminder sta $7ec702 - + lda.w DRFlags : and #$0004 : beq .restore - lda $7ef368 : and.l $0098c0, x : beq .restore - txa : lsr : tax - - lda.l GenericKeys : and #$00ff : bne + - lda $7ef4e0, x : jsr ConvertToDisplay : sta $7ec7a2 - lda #$2830 : sta $7ec7a4 - + - lda.w ChestKeys, x : jsr ConvertToDisplay : sta $7ec7a6 - ; todo 4b0 no longer in use - - .restore - plb : rts -} - -;column distance for BK/Smalls -HudOffsets: -; none hc east desert aga swamp pod mire skull ice hera tt tr gt -dw $fffe, $0000, $0006, $0008, $0002, $0010, $000e, $0018, $0012, $0016, $000a, $0014, $001a, $001e - -; offset from 1644 -RowOffsets: -dw $0000, $0000, $0040, $0080, $0000, $0080, $0040, $0080, $00c0, $0040, $00c0, $0000, $00c0, $0000 - -ColumnOffsets: -dw $0000, $0000, $0000, $0000, $000a, $000a, $000a, $0014, $000a, $0014, $0000, $0014, $0014, $001e - - -DrHudDungeonItemsAdditions: -{ - jsl DrawHUDDungeonItems - lda.l HUDDungeonItems : and #$ff : bne + : rtl : + - lda.l DRMode : cmp #$02 : beq + : rtl : + - - phx : phy : php - rep #$30 - - lda.w #$24f5 : sta $1606 : sta $1610 : sta $161a : sta $1624 - sta $1644 : sta $164a : sta $1652 : sta $1662 : sta $1684 : sta $16c4 - ldx #$0000 - - sta $1704, x : sta $170e, x : sta $1718, x - inx #2 : cpx #$0008 : !blt - - - lda !HUD_FLAG : and.w #$0020 : beq + : JMP ++ : + - lda HUDDungeonItems : and.w #$0007 : bne + : JMP ++ : + - ; bk symbols - lda.w #$2811 : sta $1606 : sta $1610 : sta $161a : sta $1624 - ; sm symbols - lda.w #$2810 : sta $160a : sta $1614 : sta $161e : sta $16e4 - ; blank out stuff - lda.w #$24f5 : sta $1724 - - ldx #$0002 - - lda #$0000 : !addl RowOffsets,x : !addl ColumnOffsets, x : tay - lda.l DungeonReminderTable, x : sta $1644, y : iny #2 - lda.w #$24f5 : sta $1644, y - lda $7ef368 : and.l $0098c0, x : beq + ; must have map - jsr BkStatus : sta $1644, y : bra .smallKey ; big key status - + lda $7ef366 : and.l $0098c0, x : beq .smallKey - lda.w #$2826 : sta $1644, y - .smallKey - + iny #2 - cpx #$001a : bne + - tya : !add #$003c : tay - + stx $00 - txa : lsr : tax - lda.w #$24f5 : sta $1644, y - lda.l GenericKeys : and #$00FF : bne + - lda.l $7ef37c, x : and #$00FF : beq + - jsr ConvertToDisplay2 : sta $1644, y - + iny #2 : lda.w #$24f5 : sta $1644, y - phx : ldx $00 - lda $7ef368 : and.l $0098c0, x : beq + ; must have map - plx : sep #$30 : lda.l ChestKeys, x : sta $02 - lda.l GenericKeys : bne +++ - lda $02 : !sub $7ef4e0, x : sta $02 - +++ lda $02 - rep #$30 - jsr ConvertToDisplay2 : sta $1644, y ; small key totals - bra .skipStack - + plx - .skipStack iny #2 - cpx #$000d : beq + - lda.w #$24f5 : sta $1644, y - + - ldx $00 - + inx #2 : cpx #$001b : bcs ++ : JMP - - ++ - lda !HUD_FLAG : and.w #$0020 : bne + : JMP ++ : + - lda HUDDungeonItems : and.w #$000c : bne + : JMP ++ : + - ; map symbols (do I want these) ; note compass symbol is 2c20 - lda.w #$2821 : sta $1606 : sta $1610 : sta $161a : sta $1624 - ; blank out a couple thing from old hud - lda.w #$24f5 : sta $16e4 : sta $1724 - sta $160a : sta $1614 : sta $161e ; blank out sm key indicators - ldx #$0002 - - lda #$0000 ; start of hud area - !addl RowOffsets, x : !addl ColumnOffsets, x : tay - lda.l DungeonReminderTable, x : sta $1644, y - iny #2 - lda.w #$24f5 : sta $1644, y ; blank out map spot - lda $7ef368 : and.l $0098c0, x : beq + ; must have map - JSR MapIndicatorShort : STA $1644, Y - + iny #2 - cpx #$001a : bne + - tya : !add #$003c : tay - + lda $7ef364 : and.l $0098c0, x : beq + ; must have compass - phx ; total chest counts - txa : lsr : tax - sep #$30 - lda.l TotalLocations, x : !sub $7EF4BF, x : JSR HudHexToDec2DigitCopy - rep #$30 - lda $06 : jsr ConvertToDisplay2 : sta $1644, y : iny #2 - lda $07 : jsr ConvertToDisplay2 : sta $1644, y - plx - bra .skipBlanks - + lda.w #$24f5 : sta $1644, y : iny #2 : sta $1644, y - .skipBlanks iny #2 - cpx #$001a : beq + - lda.w #$24f5 : sta $1644, y ; blank out spot - + inx #2 : cpx #$001b : !bge ++ : JMP - - ++ - plp : ply : plx : rtl -} - -MapIndicatorLong: - PHX - LDA.l OldHudToNewHudTable, X : TAX - JSR MapIndicator - PLX -RTL - -MapIndicatorShort: - PHX - TXA : LSR : TAX - JSR MapIndicator - PLX -RTS - -OldHudToNewHudTable: - dw 1, 2, 3, 10, 4, 6, 5, 8, 11, 9, 7, 12, 13 - -IndicatorCharacters: - ; check 1 2 3 4 5 6 7 G B R - dw $2426, $2817, $2818, $2819, $281A, $281B, $281C, $281D, $2590, $258B, $259B - -MapIndicator: - LDA.l CrystalPendantFlags_3, X : AND #$00FF - PHX - ASL : TAX : LDA.l IndicatorCharacters, X - PLX -RTS - -BkStatus: - lda $7ef366 : and.l $0098c0, x : bne +++ ; has the bk already - lda.l BigKeyStatus, x : bne ++ - lda #$2827 : rts ; 0/O for no BK - ++ cmp #$0002 : bne + - lda #$2420 : rts ; symbol for BnC - + lda #$24f5 : rts ; black otherwise - +++ lda #$2826 : rts ; check mark - -ConvertToDisplay: - and.w #$00ff : cmp #$000a : !blt + - !add #$2553 : rts - + !add #$2490 : rts - -ConvertToDisplay2: - and.w #$00ff : beq ++ - cmp #$000a : !blt + - !add #$2553 : rts ; todo: use 2580 with 258A as "A" for non transparent digits - + !add #$2816 : rts - ++ lda #$2827 : rts ; 0/O for 0 or placeholder digit ;2483 - -CountAbsorbedKeys: - jsl IncrementSmallKeysNoPrimary : phx - lda $040c : cmp #$ff : beq + - lsr : tax - lda $7ef4b0, x : inc : sta $7ef4b0, x - + plx : rtl - -;================================================================================ -; 16-bit A, 8-bit X -; in: A(b) - Byte to Convert -; out: $04 - $07 (high - low) -;================================================================================ -HudHexToDec4DigitCopy: - LDY.b #$90 - - - CMP.w #1000 : !BLT + - INY - SBC.w #1000 : BRA - - + - STY $04 : LDY #$90 ; Store 1000s digit & reset Y - - - CMP.w #100 : !BLT + - INY - SBC.w #100 : BRA - - + - STY $05 : LDY #$90 ; Store 100s digit & reset Y - - - CMP.w #10 : !BLT + - INY - SBC.w #10 : BRA - - + - STY $06 : LDY #$90 ; Store 10s digit & reset Y - CMP.w #1 : !BLT + - - - INY - DEC : BNE - - + - STY $07 ; Store 1s digit -RTS - -;================================================================================ -; 8-bit registers -; in: A(b) - Byte to Convert -; out: $06 - $07 (high - low) -;================================================================================ -HudHexToDec2DigitCopy: ; modified - PHY - LDY.b #$00 - - - CMP.b #10 : !BLT + - INY - SBC.b #10 : BRA - - + - STY $06 : LDY #$00 ; Store 10s digit and reset Y - CMP.b #1 : !BLT + - - - INY - DEC : BNE - - + - STY $07 ; Store 1s digit - PLY -RTS \ No newline at end of file diff --git a/asm/keydoors.asm b/asm/keydoors.asm deleted file mode 100644 index 1ec10c39..00000000 --- a/asm/keydoors.asm +++ /dev/null @@ -1,42 +0,0 @@ -; code to un-pair or re-pair doors - -; doorlist is loaded into 19A0 but no terminator -; new room is in A0 -; for "each" door do the following: (each could mean the first four doors?) -; in lookup table, grab room and corresponding position -; find the info at 7ef000, x where x is twice the paired room -; check the corresponding bit (there are only 4) -; set the bit in 068C - -; Note the carry bit is used to indicate if we should aborted (set) or not -CheckIfDoorsOpen: { - jsr TrapDoorFixer ; see normal.asm - ; note we are 16bit mode right now - lda.l DRMode : beq + - lda $040c : cmp #$00ff : bne .gtg - + lda $a0 : dec : tax : and #$000f ; hijacked code - sec : rtl ; set carry to indicate normal behavior - - .gtg - phb : phk : plb - stx $00 : ldy #$0000 - .nextDoor - lda $a0 : asl : tax - lda.w KeyDoorOffset, x : beq .skipDoor - asl : sty $05 : !add $05 : tax - lda.w PairedDoorTable, x : beq .skipDoor - sta $02 : and #$00ff : asl a : tax - lda $02 : and #$ff00 : sta $03 - lda $7ef000, x : and #$f000 : and $03 : beq .skipDoor - tyx : lda $068c : ora $0098c0,x : sta $068c - .skipDoor - iny #2 : cpy $00 : bne .nextDoor - plb : clc : rtl -} - -; outstanding issues -; how to indicate opening for other (non-first four doors?) -; Bank01 Door Register stores the 4 bits in 068c to 400 (depending on type) -; Key collision and others depend on F0-F3 attribute not sure if extendable to other numbers -; Dungeon_ProcessTorchAndDoorInteractives.isOpenableDoor is the likely culprit for collision problems -; Saving open status to other unused rooms is tricky -- Bank 2 13947 (line 8888) \ No newline at end of file diff --git a/asm/math.asm b/asm/math.asm deleted file mode 100644 index 03cd46a3..00000000 --- a/asm/math.asm +++ /dev/null @@ -1,66 +0,0 @@ -;divide by 2 example -; 0 1 2 3 4 5 6 7 8 9 a b c d e f 10--Offset Ruler -;v 00 01 01 02 02 03 03 04 04 04 05 05 06 06 07 07 08 - -;divide by 3 example -; 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 -;00 00 01 01 01 02 02 02 03 03 03 04 04 04 05 05 05 06 06 06 07 07 07 08 08 - -MultiplyByY: -.loop cpy #$0001 : beq .done -cpy #$0003 : bne ++ - jsr MultiBy3 : bra .done -++ cpy #$0005 : bne ++ - jsr MultiBy5 : bra .done -++ asl : sta $00 : tya : lsr : tay : lda $00 : bra .loop -.done rts - -;Divisor in Y. Width of division is in X for rounding toward middle -DivideByY: -.loop -cpy #$0000 : beq .done -cpy #$0001 : beq .done -cpy #$0003 : bne ++ - jsr DivideBy3 : bra .done -++ cpy #$0005 : bne ++ - jsr DivideBy5 : bra .done -++ jsr DivideBy2 : sta $00 -tya : lsr : tay -txa : lsr : tax -lda $00 : bra .loop -.done rts - -MultiBy3: -sta $00 : asl : !add $00 -rts - -MultiBy5: -sta $00 : asl #2 : !add $00 -rts - -;width of divison in x: rounds toward X/2 -DivideBy2: -sta $00 -lsr : bcc .done -sta $02 : txa : lsr : cmp $00 : !blt + - lda $02 : inc : bra .done -+ lda $02 -.done rts - -DivideBy3: -sta $00 -ldx #$0000 -lda #$0002 -.loop cmp $00 : !bge .store - inx : !add #$0003 : bra .loop -.store txa -rts - -DivideBy5: -sta $00 -ldx #$0000 -lda #$0003 -.loop cmp $00 : !bge .store - inx : !add #$0005 : bra .loop -.store txa -rts \ No newline at end of file diff --git a/asm/normal.asm b/asm/normal.asm deleted file mode 100644 index 13323d88..00000000 --- a/asm/normal.asm +++ /dev/null @@ -1,419 +0,0 @@ -WarpLeft: - lda.l DRMode : beq .end - lda $040c : cmp.b #$ff : beq .end - lda $20 : ldx $aa - jsr CalcIndex - !add #$06 : ldy #$01 ; offsets in A, Y - jsr LoadRoomHorz -.end - jsr Cleanup - rtl - -WarpRight: - lda.l DRMode : beq .end - lda $040c : cmp.b #$ff : beq .end - lda $20 : ldx $aa - jsr CalcIndex - !add #$12 : ldy #$ff ; offsets in A, Y - jsr LoadRoomHorz -.end - jsr Cleanup - rtl - -WarpUp: - lda.l DRMode : beq .end - lda $040c : cmp.b #$ff : beq .end - lda $22 : ldx $a9 - jsr CalcIndex - ldy #$02 ; offsets in A, Y - jsr LoadRoomVert -.end - jsr Cleanup - rtl - -; Checks if $a0 is equal to . If it is, opens its stonewall if it's there -macro StonewallCheck(Room) - lda $a0 : cmp.b # : bne ?end - lda.l *2+$7ef000 : ora #$80 : sta.l *2+$7ef000 - ?end -endmacro - -WarpDown: - lda.l DRMode : beq .end - lda $040c : cmp.b #$ff : beq .end - lda $22 : ldx $a9 - jsr CalcIndex - !add #$0c : ldy #$ff ; offsets in A, Y - jsr LoadRoomVert - %StonewallCheck($43) -.end - jsr Cleanup - rtl - -; carry set = use link door like normal -; carry clear = we are in dr mode, never use linking doors -CheckLinkDoorR: - lda.l DRMode : bne + - lda $7ec004 : sta $a0 ; what we wrote over - sec : rtl - + clc : rtl - -CheckLinkDoorL: - lda.l DRMode : bne + - lda $7ec003 : sta $a0 ; what we wrote over - sec : rtl - + clc : rtl - -TrapDoorFixer: - lda $fe : and #$0038 : beq .end - xba : asl #2 : sta $00 - stz $0468 : lda $068c : ora $00 : sta $068c - .end - stz $fe ; clear our fe here because we don't need it anymore - rts - -Cleanup: - lda.l DRFlags : and #$10 : beq + - stz $047a - + inc $11 - lda $ef - rts - -;A needs be to the low coordinate, x needs to be either 0 for left,upper or non-zero for right,down -; This sets A (00,02,04) and stores half that at $04 for later use, (src door) -CalcIndex: ; A->low byte of Link's Coord, X-> Link's quadrant, DoorOffset x 2 -> A, DoorOffset -> $04 (vert/horz agnostic) - cpx.b #00 : bne .largeDoor - cmp.b #$d0 : bcc .smallDoor - lda #$01 : bra .done ; Middle Door - .smallDoor lda #$00 : bra .done - .largeDoor lda #$02 - .done - sta $04 - asl - rts - -; Y is an adjustment for main direction of travel -; A is a door table row offset -LoadRoomHorz: -{ - phb : phk : plb - sty $06 : sta $07 : lda $a0 : pha ; Store normal room on stack - lda $07 : jsr LookupNewRoom ; New room is in A, Room Data is in $00-$01 - lda $00 : cmp #$03 : bne .gtg - jsr HorzEdge : pla : bcs .end - sta $a0 : bra .end ; Restore normal room, abort (straight staircases and open edges can get in this routine) - - .gtg ;Good to Go! - pla ; Throw away normal room (don't fill up the stack) - lda $a0 : and.b #$0F : asl a : !sub $23 : !add $06 : sta $02 - ldy #$00 : jsr ShiftVariablesMainDir - - lda $01 : and #$80 : beq .normal - ldy $06 : cpy #$ff : beq + - lda $01 : jsr LoadEastMidpoint : bra ++ - + lda $01 : jsr LoadWestMidpoint - ++ jsr PrepScrollToEdge : bra .scroll - - .normal - jsr PrepScrollToNormal - .scroll - lda $01 : and #$40 : pha - jsr ScrollY - pla : beq .end - ldy #$06 : jsr ApplyScroll - .end - plb ; restore db register - rts -} - -; Y is an adjustment for main direction of travel (stored at $06) -; A is a door table row offset (stored a $07) -LoadRoomVert: -{ - phb : phk : plb - sty $06 : sta $07 : lda $a0 : pha ; Store normal room on stack - lda $07 : jsr LookupNewRoom ; New room is in A, Room Data is in $00-$01 - lda $00 : cmp #$03 : bne .gtg - jsr VertEdge : pla : bcs .end - sta $a0 : bra .end ; Restore normal room, abort (straight staircases and open edges can get in this routine) - .gtg ;Good to Go! - pla ; Throw away normal room (don't fill up the stack) - lda $a0 : and.b #$F0 : lsr #3 : !sub $21 : !add $06 : sta $02 - - lda $01 : and #$80 : beq .notEdge - ldy #$01 : jsr ShiftVariablesMainDir - ldy $06 : cpy #$ff : beq + - lda $01 : jsr LoadSouthMidpoint : bra ++ - + lda $01 : jsr LoadNorthMidpoint - ++ jsr PrepScrollToEdge : bra .scroll - - .notEdge - lda $01 : and #$03 : cmp #$03 : bne .normal - jsr ScrollToInroomStairs - stz $046d - bra .end - .normal - ldy #$01 : jsr ShiftVariablesMainDir - jsr PrepScrollToNormal - .scroll - lda $01 : and #$40 : sta $046d - jsr ScrollX - .end - plb ; restore db register - rts -} - -LookupNewRoom: ; expects data offset to be in A -{ - rep #$30 : and #$00FF ;sanitize A reg (who knows what is in the high byte) - sta $00 ; offset in 00 - lda $a2 : tax ; probably okay loading $a3 in the high byte - lda.w DoorOffset,x : and #$00FF ;we only want the low byte - asl #3 : sta $02 : !add $02 : !add $02 ;multiply by 24 (data size) - !add $00 ; should now have the offset of the address I want to load - tax : lda.w DoorTable,x : sta $00 - and #$00FF : sta $a0 ; assign new room - sep #$30 - rts -} - -; INPUTS-- Y: Direction Index , $02: Shift Value -; Sets high bytes of various registers -ShiftVariablesMainDir: -{ - lda.w CoordIndex,y : tax - lda $21,x : !add $02 : sta $21,x ; coordinate update - lda.w CameraIndex,y : tax - lda $e3,x : !add $02 : sta $e3,x ; scroll register high byte - lda.w CamQuadIndex,y : tax - lda $0605,x : !add $02 : sta $0605,x ; high bytes of these guys - lda $0607,x : !add $02 : sta $0607,x - lda $0601,x : !add $02 : sta $0601,x - lda $0603,x : !add $02 : sta $0603,x - rts -} - -; Normal Flags should be in $01 -ScrollToInroomStairs: -{ - jsr PrepScrollToInroomStairs - ldy #$01 : jsr ShiftVariablesMainDir - jsr ScrollX - ldy #$00 : jsr ApplyScroll - lda $a0 : and #$0f : cmp #$0f : bne + - stz $e0 : stz $e2 ; special case camera fix - lda #$1f : sta $e1 : sta $e3 - + - rts -} - -; Direction should be in $06, Shift Value (see above) in $02 and other info in $01 -; Sets $02, $04, $05, $ee, $045e, $045f and things related to Y coordinate -PrepScrollToInroomStairs: -{ - lda $01 : and #$30 : lsr #3 : tay - lda.w InroomStairsX,y : sta $04 - lda.w InroomStairsX+1,y : sta $05 - lda $06 : cmp #$ff : beq .south - lda.w InroomStairsY+1,y : bne + - inc $045f ; flag indicating special screen transition - dec $02 ; shift variables further - stz $aa - lda $a8 : and #%11111101 : sta $a8 - stz $0613 ; North scroll target - inc $0603 : inc $0607 - dec $0619 : dec $061b - + - lda.w InroomStairsY,y : !add #$20 : sta $20 - !sub #$38 : sta $045e - lda $01 : and #$40 : beq + - lda $20 : !add #$20 : sta $20 - stz $045f - + - dec $21 - %StonewallCheck($1b) - bra ++ - .south - lda.w InroomStairsY+1,y : beq + - inc $045f ; flag indicating special screen transition - inc $02 ; shift variables further - lda #$02 : sta $aa - lda $a8 : ora #%00000010 : sta $a8 - inc $0611 ; South scroll target - dec $0603 : dec $0607 - inc $0619 : inc $061b - + - lda.w InroomStairsY,y : !sub #$20 : sta $20 - !add #$38 : sta $045e - lda $01 : and #$40 : beq + - lda $20 : !sub #$20 : sta $20 - stz $045f - + - inc $21 - ++ - lda $01 : and #$04 : lsr #2 : sta $ee : bne + - stz $0476 - + rts -} - -; Target pixel should be in A, other info in $01 -; Sets $04 $05 and $ee -PrepScrollToEdge: -{ - sta $04 : lda $01 : and #$20 : beq + - lda #01 - + sta $05 - lda $01 : and #$10 : beq + - lda #01 - + sta $ee : bne + - stz $0476 - + rts -} - -; Normal Flags should be in $01 -; Sets $04 $05 and $ee, and $fe -PrepScrollToNormal: -{ - lda $01 : sta $fe : and #$04 : lsr #2 : sta $ee ; trap door and layer - bne + - stz $0476 - + stz $05 : lda #$78 : sta $04 - lda $01 : and #$03 : beq .end - cmp #$02 : !bge + - lda #$f8 : sta $04 : bra .end - + inc $05 - .end rts -} - -StraightStairsAdj: -{ - stx $0464 : sty $012e ; what we wrote over - lda.l DRMode : beq + - lda $045e : bne .toInroom - lda $046d : beq .noScroll - sta $22 - ldy #$00 : jsr ApplyScroll - stz $046d - .noScroll - jsr GetTileAttribute : tax - lda $11 : cmp #$12 : beq .goingNorth - lda $a2 : cmp #$51 : bne ++ - rep #$20 : lda #$0018 : !add $20 : sta $20 : sep #$20 ; special fix for throne room - jsr GetTileAttribute : tax - ++ lda.l StepAdjustmentDown, X : bra .end -; lda $ee : beq .end -; rep #$20 : lda #$ffe0 : !add $20 : sta $20 : sep #$20 - .goingNorth - cpx #$00 : bne ++ - lda $a0 : cmp #$51 : bne ++ - lda #$36 : bra .end ; special fix for throne room - ++ ldy $ee : cpy #$00 : beq ++ - inx - ++ lda.l StepAdjustmentUp, X - .end - pha : lda $0462 : and #$04 : bne ++ - pla : !add #$f6 : pha - ++ pla : !add $0464 : sta $0464 - + rtl - .toInroom - lda #$32 : sta $0464 : stz $045e - rtl -} - -GetTileAttribute: -{ - phk : pea.w .jslrtsreturn-1 - pea.w $02802c - jml $02c11d ; mucks with x/y sets a to Tile Attribute, I think - .jslrtsreturn - rts -} - -; 0 open edge -; 1 nrm door high -; 2 straight str -; 3 nrm door low -; 4 trap door high -; 5 trap door low (none of these exist on North direction) -StepAdjustmentUp: ; really North Stairs -db $00, $f6, $1a, $18, $16, $38 -StepAdjustmentDown: ; really South Stairs -db $d0, $f6, $10, $1a, $f0, $00 - -StraightStairsFix: -{ - pha - lda.l DRMode : bne + - pla : !add $20 : sta $20 : rtl ;what we wrote over - + pla : rtl -} - -StraightStairLayerFix: -{ - lda.l DRMode : beq + - lda $ee : rtl - + lda $01c322, x : rtl ; what we wrote over -} - -DoorToStraight: -{ - pha - lda.l DRMode : beq .skip - pla : bne .end - pha - lda $a0 : cmp #$51 : bne .skip - lda #$04 : sta $4e - .skip pla - .end ldx $0418 : cmp #$02 ;what we wrote over - rtl -} - -DoorToInroom: -{ - ldx $045e : bne .end - sta $0020, y ; what we wrote over - .end - ldx #$00 ; what we wrote over - rtl -} - -DoorToInroomEnd: -{ - ldy $045e : beq .vanilla - cmp $045e : bne .return - stz $045e ; clear - .return - rtl - .vanilla - cmp $02c034, x ; what we wrote over - rtl -} - -StraightStairsTrapDoor: -{ - lda $0464 : bne + - ; reset function - .reset phk : pea.w .jslrtsreturn-1 - pea.w $02802c - jml $028c73 ; $10D71 .reset label of Bank02 - .jslrtsreturn - lda $0468 : bne ++ - lda $a0 : cmp.b #$ac : bne .animateTraps - lda $0403 : and.b #$20 : bne .animateTraps - lda $0403 : and.b #$10 : beq ++ - .animateTraps - lda #$05 : sta $11 - inc $0468 : stz $068e : stz $0690 - ++ JSL Underworld_DoorDown_Call : rtl - + JML Dungeon_ApproachFixedColor ; what we wrote over -} - -InroomStairsTrapDoor: -{ - lda $0200 : cmp #$05 : beq .reset - lda $b0 : jml $008781 ; what we wrote over (essentially) - .reset - pla : pla : pla - jsl StraightStairsTrapDoor_reset - jml $028b15 ; just some RTS in bank 02 -} \ No newline at end of file diff --git a/asm/overrides.asm b/asm/overrides.asm deleted file mode 100644 index c822de5f..00000000 --- a/asm/overrides.asm +++ /dev/null @@ -1,154 +0,0 @@ -;================================================================================ -; Lamp Mantle & Light Cone Fix -;-------------------------------------------------------------------------------- -; Output: 0 for darkness, 1 for lamp cone -;-------------------------------------------------------------------------------- -LampCheckOverride: - LDA $7F50C4 : CMP.b #$01 : BNE + : RTL : + - CMP.b #$FF : BNE + : INC : RTL : + - - LDA $7EF34A : BNE .done ; skip if we already have lantern - - LDA $7EF3CA : BNE + - .lightWorld - LDA $040C : CMP.b #$04 : !BGE ++ ; check if we're in HC - LDA LampConeSewers : BRA .done - ++ - LDA LampConeLightWorld : BRA .done - + - .darkWorld - LDA LampConeDarkWorld - .done - ;BNE + : STZ $1D : + ; remember to turn cone off after a torch -RTL - -GtBossHeartCheckOverride: - lda $a0 : cmp #$1c : beq ++ - cmp #$6c : beq ++ - cmp #$4d : bne + - ++ lda.l DRFlags : and #$01 : bne ++ ;skip if flag on - lda $403 : ora #$80 : sta $403 - ++ clc -rtl - + sec -rtl - -OnFileLoadOverride: - jsl OnFileLoad ; what I wrote over - + lda.l DRFlags : and #$02 : beq + ; Mirror Scroll - lda $7ef353 : bne + - lda #$01 : sta $7ef353 -+ rtl - -MirrorCheckOverride: - lda.l DRFlags : and #$02 : beq ++ - lda $7ef353 : cmp #$01 : beq + - ++ lda $8A : and #$40 ; what I wrote over - rtl - + lda.l DRScroll : rtl - -EGFixOnMirror: - lda.l DRFlags : and #$10 : beq + - stz $047a - + jsl Mirror_SaveRoomData - rtl - -BlockEraseFix: - lda $7ef353 : and #$02 : beq + - stz $05fc : stz $05fd - + rtl - -FixShopCode: - cpx #$300 : !bge + - sta $7ef000, x - + rtl - -VitreousKeyReset: - lda.l DRMode : beq + - stz $0cba, x - + JML $0db818 ;restore old code - -GuruguruFix: - lda $a0 : cmp #$df : !bge + - and #$0f : cmp #$0e : !blt + - iny #2 - + rtl - -BlindAtticFix: - lda.l DRMode : beq + - lda #$01 : rtl - + lda $7EF3CC : cmp.b #$06 - rtl - -SuctionOverworldFix: - stz $50 : stz $5e - lda.l DRMode : beq + - stz $49 - + rtl - -!CutoffTable = "$27E000" - -CutoffEntranceRug: - PHA : PHX - LDA.l DRMode : BEQ .norm - LDA $04 : cmp #$000A : BEQ + ; only affect A & C objects - cmp #$000C : BNE .norm - + LDX #$0000 : LDA !CutoffTable, x - - CMP.W $A0 : BEQ .check - INX #2 : LDA !CutoffTable, x : CMP.w #$FFFF : BNE - - .norm PLX : PLA : LDA $9B52, y : STA $7E2000, x ; what we wrote over -RTL - .check - LDA $0c : CMP #$0004 : !BGE .skip - LDA $0e : CMP #$0008 : !BGE .skip - CMP.l #$0004 : !BLT .skip - BRA .norm -.skip PLX : PLA : RTL - -StoreTempBunnyState: - LDA $5D : CMP #$1C : BNE + - STA $5F - + LDA #$15 : STA $5D ; what we wrote over -RTL - -RetrieveBunnyState: - STY $5D : STZ $02D8 ; what we wrote over - LDA $5F : BEQ + - STA $5D -+ RTL - -RainPrevention: - 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 - LDA.l BlockSanctuaryDoorInRain : BEQ .done ;flagged - LDA $A0 : CMP #$0012 : BNE + ;we're in the sanctuary - LDA.l $7EF3CC : AND #$00FF : CMP #$0001 : BEQ .done ; zelda is following - LDA $00 : AND #$00FF : CMP #$00A1 : BNE .done ; position is a1 - PLA : LDA #$0008 : RTL - + LDA.l BlockCastleDoorsInRain : AND #$00FF : BEQ .done ;flagged - LDX #$FFFE - - INX #2 : LDA.l RemoveRainDoorsRoom, X : CMP #$FFFF : BEQ .done - CMP $A0 : BNE - - 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: - LDX.b #$00 ; part of what we wrote over - LDA.l $7EF3C6 : AND #$04 : BEQ + ; zelda's not been rescued - LDA.b #$10 ; hurt him! - + RTL ; A is zero if the AND results in zero and then Agahnim's invincible! - -; note: this skips both maiden dialog triggers if the hole is open -BlindsAtticHint: - REP #$20 - CMP.w #$0122 : BNE + - LDA $7EF0CA : AND.w #$0100 : BEQ + - SEP #$20 : RTL ; skip the dialog box if the hole is already open - + SEP #$20 : JML Main_ShowTextMessage - diff --git a/asm/scroll.asm b/asm/scroll.asm deleted file mode 100644 index 435b5c98..00000000 --- a/asm/scroll.asm +++ /dev/null @@ -1,222 +0,0 @@ -AdjustTransition: -{ - lda $ab : and #$01ff : beq .reset - phy : ldy #$06 ; operating on vertical registers during horizontal trans - cpx.b #$02 : bcs .horizontalScrolling - ldy #$00 ; operate on horizontal regs during vert trans - .horizontalScrolling - cmp #$0008 : bcs + - pha : lda $ab : and #$0200 : beq ++ - pla : bra .add - ++ pla : eor #$ffff : inc ; convert to negative - .add jsr AdjustCamAdd : ply : bra .reset - + lda $ab : and #$0200 : xba : tax - lda.l OffsetTable,x : jsr AdjustCamAdd - lda $ab : !sub #$0008 : sta $ab - ply : bra .done - .reset ; clear the $ab variable so to not disturb intra-tile doors - stz $ab - .done - lda $00 : and #$01fc - rtl -} - -AdjustCamAdd: - !add $00E2,y : pha - and #$01ff : cmp #$0111 : !blt + - cmp #$01f8 : !bge ++ - pla : and #$ff10 : pha : bra + - ++ pla : and #$ff00 : !add #$0100 : pha - + pla : sta $00E2,y : sta $00E0,y : rts - -; expects target quad in $05 (either 0 or 1) and target pixel in $04, target room should be in $a0 -; $06 is either $ff or $01/02 -; uses $00-$03 and $0e for calculation -; also set up $ac -ScrollY: ;change the Y offset variables - lda $a0 : and.b #$f0 : lsr #3 : sta $0603 : inc : sta $0607 - - lda $05 : bne + - lda $603 : sta $00 : stz $01 : bra ++ - + lda $607 : sta $00 : lda #$02 : sta $01 - ++ ; $01 now contains 0 or 2 and $00 contains the correct lat - - stz $0e - rep #$30 - lda $00 : pha - - lda $e8 : and #$01ff : sta $02 - lda $04 : jsr LimitYCamera : sta $00 - jsr CheckRoomLayoutY : bcc + - lda $00 : cmp #$0080 : !bge ++ - cmp #$0010 : !blt .cmpSrll - lda #$0010 : bra .cmpSrll - ++ cmp #$0100 : !bge .cmpSrll - lda #$0100 - .cmpSrll sta $00 - - ; figures out scroll amt - + lda $00 : cmp $02 : bne + - lda #$0000 : bra .next - + !blt + - !sub $02 : inc $0e : bra .next - + lda $02 : !sub $00 - - .next - sta $ab - jsr AdjustCameraBoundsY - - pla : sta $00 - sep #$30 - lda $04 : sta $20 - lda $00 : sta $21 : sta $0601 : sta $0605 - lda $01 : sta $aa - lda $0e : asl : ora $ac : sta $ac - lda $e9 : and #$01 : asl #2 : tax : lda $0603, x : sta $e9 - rts - -LimitYCamera: - cmp #$006c : !bge + - lda #$0000 : bra .end - + cmp #$017d : !blt + - lda #$0110 : bra .end - + !sub #$006c - .end rts - -CheckRoomLayoutY: - jsr LoadRoomLayout ;switches to 8-bit - cmp #$00 : beq .lock - cmp #$07 : beq .free - cmp #$01 : beq .free - cmp #$04 : !bge .lock - cmp #$02 : bne + - lda $06 : cmp #$ff : beq .lock - + cmp #$03 : bne .free - lda $06 : cmp #$ff : bne .lock - .free rep #$30 : clc : rts - .lock rep #$30 : sec : rts - -AdjustCameraBoundsY: - jsr CheckRoomLayoutY : bcc .free - - ; layouts that are camera locked (quads only) - lda $04 : and #$00ff : cmp #$007d : !blt + - lda #$0088 : bra ++ - + cmp #$006d : !bge + - lda #$0078 : bra ++ - + !add #$000b - - ; I think we no longer need the $02 variable - ++ sta $02 : lda $04 : and #$0100 : !add $02 : bra .setBounds - - ; layouts where the camera is free - .free lda $04 : cmp #$006c : !bge + - lda #$0077 : bra .setBounds - + cmp #$017c : !blt + - lda #$0187 : bra .setBounds - + !add #$000b - .setBounds sta $0618 : inc #2 : sta $061a - rts - -LoadRoomLayout: - lda $a0 : asl : !add $a0 : tax - lda $1f8001, x : sta $b8 - lda $1f8000, x : sta $b7 - sep #$30 - ldy #$01 : lda [$b7], y : and #$1c : lsr #2 - rts - -; expects target quad in $05 (either 0 or 1) and target pixel in $04, target room should be in $a0 -; uses $00-$03 and $0e for calculation -; also set up $ac -ScrollX: ;change the X offset variables - lda $a0 : and.b #$0f : asl : sta $060b : inc : sta $060f - - lda $05 : bne + - lda $60b : sta $00 : stz $01 : bra ++ - + lda $60f : sta $00 : lda #$01 : sta $01 - ++ ; $01 now contains 0 or 1 and $00 contains the correct long - - stz $0e ; pos/neg indicator - rep #$30 - lda $00 : pha - - lda $e2 : and #$01ff : sta $02 - lda $04 : jsr LimitXCamera : sta $00 - jsr CheckRoomLayoutX : bcc + - lda $00 : cmp #$0080 : !bge ++ - lda #$0000 : bra .cmpSrll - ++ lda #$0100 - .cmpSrll sta $00 - - ;figures out scroll amt - + lda $00 : cmp $02 : bne + - lda #$0000 : bra .next - + !blt + - !sub $02 : inc $0e : bra .next - + lda $02 : !sub $00 - - .next - sta $ab : lda $04 - - cmp #$0078 : !bge + - lda #$007f : bra ++ - + cmp #$0178 : !blt + - lda #$017f : bra ++ - + !add #$0007 - ++ sta $061c : inc #2 : sta $061e - - pla : sta $00 - sep #$30 - lda $04 : ldx $046d : bne .straight - sta $22 : bra + - .straight - sta $046d ; set X position later - + - lda $00 : sta $23 : sta $0609 : sta $060d - lda $01 : sta $a9 - lda $0e : asl : ora $ac : sta $ac - lda $e3 : and #$01 : asl #2 : tax : lda $060b, x : sta $e3 - - rts - -LimitXCamera: - cmp #$0079 : !bge + - lda #$0000 : bra .end - + cmp #$0178 : !blt + - lda #$0178 - + !sub #$0078 - .end rts - -CheckRoomLayoutX: - jsr LoadRoomLayout ;switches to 8-bit - cmp #$04 : !blt .lock - cmp #$05 : bne + - lda $06 : cmp #$ff : beq .lock - + cmp #$06 : bne .free - lda $06 : cmp #$ff : bne .lock - .free rep #$30 : clc : rts - .lock rep #$30 : sec : rts - -ApplyScroll: - rep #$30 - lda $ab : and #$01ff : sta $00 - lda $ab : and #$0200 : beq + - lda $00e2, y : !add $00 : bra .end - + lda $00e2, y : !sub $00 - .end - sta $00e2, y - sta $00e0, y - stz $ab : sep #$30 : rts - -QuadrantLoadOrderBeforeScroll: - lda $045f : beq .end - lda #$08 : sta $045c ; start with opposite quadrant row - .end - JML $0091c4 ; what we overwrote - -QuadrantLoadOrderAfterScroll: - lda $045f : beq .end - stz $045c : stz $045f ; draw other row and clear flag - .end - JML $0091c4 ; what we overwrote \ No newline at end of file diff --git a/asm/spiral.asm b/asm/spiral.asm deleted file mode 100644 index e73b5e16..00000000 --- a/asm/spiral.asm +++ /dev/null @@ -1,332 +0,0 @@ -RecordStairType: { - pha - lda.l DRMode : beq .norm - lda $040c : cmp #$ff : beq .norm - lda $0e - cmp #$25 : bcc ++ ; don't record straight staircases - sta $045e - ++ pla : bra + - .norm pla : sta $a0 - + lda $063d, x - rtl -} - -SpiralWarp: { - lda.l DRMode : beq .abort ; abort if not DR - lda $040c : cmp.b #$ff : beq .abort ; abort if not in dungeon - lda $045e : cmp #$5e : beq .gtg ; abort if not spiral - intended room is in A! - cmp #$5f : beq .gtg - cmp #$26 : beq .inroom - .abort - stz $045e : lda $a2 : and #$0f : rtl ; clear,run hijacked code and get out - .inroom - jsr InroomStairsWarp - lda $a2 : and #$0f ; this is the code we are hijacking - rtl - - .gtg - phb : phk : plb : phx : phy ; push stuff - jsr LookupSpiralOffset - rep #$30 : and #$00FF : asl #2 : tax - lda.w SpiralTable, x : sta $00 - lda.w SpiralTable+2, x : sta $02 - sep #$30 - lda $00 : sta $a0 - ; shift quadrant if necessary - stz $07 ; this is a x quad adjuster for those blasted staircase on the edges - lda $01 : and #$01 : !sub $a9 - bne .xQuad - lda $0462 : and #$04 : bne .xqCont - inc $07 - .xqCont lda $22 : bne .skipXQuad ; this is an edge case - dec $23 : bra .skipXQuad ; need to -1 if $22 is 0 - .xQuad sta $06 : !add $a9 : sta $a9 - lda $0462 : and #$04 : bne .xCont - inc $07 ; up stairs are going to -1 the quad anyway during transition, need to add this back - .xCont ldy #$00 : jsr ShiftQuadSimple - - .skipXQuad - lda $aa : lsr : sta $06 : lda $01 : and #$02 : lsr : !sub $06 - beq .skipYQuad - sta $06 : asl : !add $aa : sta $aa - ldy #$01 : jsr ShiftQuadSimple - - .skipYQuad - lda $01 : and #$04 : lsr : sta $048a ;fix layer calc 0->0 2->1 - lda $01 : and #$08 : lsr #2 : sta $0492 ;fix from layer calc 0->0 2->1 - ; shift lower coordinates - lda $02 : sta $22 : bne .adjY : lda $23 : !add $07 : sta $23 - .adjY lda $03 : sta $20 : bne .upDownAdj : inc $21 - .upDownAdj ldx #$08 - lda $0462 : and #$04 : beq .upStairs - ldx #$fd - lda $01 : and #$80 : bne .set53 - ; if target is also down adjust by (6,-15) - lda #$06 : !add $20 : sta $20 : lda #$eb : !add $22 : sta $22 : bra .set53 - .upStairs - lda $01 : and #$80 : beq .set53 - ; if target is also up adjust by (-6, 14) - lda #$fa : !add $20 : sta $20 : lda #$14 : !add $22 : sta $22 - bne .set53 : inc $23 - .set53 - txa : !add $22 : sta $53 - - lda $01 : and #$10 : sta $07 ; zeroHzCam check - ldy #$00 : jsr SetCamera - lda $01 : and #$20 : sta $07 ; zeroVtCam check - ldy #$01 : jsr SetCamera - - jsr StairCleanup - ply : plx : plb ; pull the stuff we pushed - lda $a2 : and #$0f ; this is the code we are hijacking - rtl -} - -StairCleanup: { - stz $045e ; clear the staircase flag - - ; animated tiles fix - lda.l DRMode : cmp #$02 : bne + ; only do this in crossed mode - ldx $a0 : lda.l TilesetTable, x - cmp $0aa1 : beq + ; already eq no need to decomp - sta $0aa1 - tax : lda $02802e, x : tay - jsl DecompDungAnimatedTiles - + - stz $047a - rts -} - -;Sets the offset in A -LookupSpiralOffset: { - ;where link currently is in $a2: quad in a8 & #$03 - ;count doors - stz $00 : ldx #$00 : stz $01 - - .loop - lda $047e, x : cmp $00 : bcc .continue - sta $00 - .continue inx #2 - cpx #$08 : bcc .loop - - lda $00 : lsr - cmp #$01 : beq .done - - ; look up the quad - lda $a9 : ora $aa : and #$03 : beq .quad0 - cmp #$01 : beq .quad1 - cmp #$02 : beq .quad2 - bra .quad3 - .quad0 - inc $01 : lda $a2 - cmp #$0c : beq .q0diff ;gt ent - cmp #$70 : bne .done ;hc stairwell - .q0diff lda $22 : cmp #$00 : beq .secondDoor - cmp #$98 : bcc .done ;gt ent and hc stairwell - .secondDoor inc $01 : bra .done - .quad1 - lda $a2 - cmp #$1a : beq .q1diff ;pod compass - cmp #$26 : beq .q1diff ;swamp elbows - cmp #$6a : beq .q1diff ;pod dark basement - cmp #$76 : bne .done ;swamp drain - .q1diff lda $22 : cmp #$98 : bcc .done - inc $01 : bra .done - .quad2 - lda #$03 : sta $01 : lda $a2 - cmp #$5f : beq .iceu ;ice u room - cmp #$3f : bne .done ;hammer ice exception - stz $01 : bra .done - .iceu lda $22 : cmp #$78 : bcc .done - inc $01 : bra .done - .quad3 - lda $a2 : cmp #$40 : beq .done ; top of aga exception - lda #$02 : sta $01 ; always 2 - - .done - lda $a2 : tax : lda.w SpiralOffset,x - !add $01 ;add a thing (0 in easy case) - rts -} - -InroomStairsWarp: { - phb : phk : plb : phx : phy ; push stuff - ; find stairs by room and store index in X - lda $a0 : ldx #$07 - .loop - cmp.w InroomStairsRoom,x - beq .found - dex - bne .loop - .found - rep #$30 - txa : and #$00ff : asl : tay - lda.w InroomStairsTable,y : sta $00 - sep #$30 - sta $a0 - - ; set position and everything else based on target door type - txa : and #$01 : eor #$01 : sta $07 - ; should be the same as lda $0462 : and #$04 : lsr #2 : eor #$01 : sta $07 - lda $01 : and #$80 : beq .notEdge - lda $07 : sta $03 : beq + - lda $01 : jsr LoadSouthMidpoint : sta $22 : lda #$f4 - bra ++ - + - lda $01 : jsr LoadNorthMidpoint : sta $22 : dec $21 : lda #$f7 - ++ - sta $20 - lda $01 : and #$20 : beq + - lda #$01 - + - sta $02 - stz $07 - lda $01 : and #$10 : lsr #4 - JMP .layer - .notEdge - lda $01 : and #$03 : cmp #$03 : bne .normal - txa : and #$06 : sta $07 - lda $01 : and #$30 : lsr #3 : tay - lda.w InroomStairsX+1,y : sta $02 - lda.w InroomStairsY+1,y : sta $03 - cpy $07 : beq .vanillaTransition - lda.w InroomStairsX,y : sta $22 - lda.w InroomStairsY,y - ldy $07 : beq + - !add #$07 - + - sta $20 - inc $07 - bra ++ - .vanillaTransition - lda #$c0 : sta $07 ; leave camera - ++ - %StonewallCheck($1b) - lda $01 : and #$04 : lsr #2 - bra .layer - .normal - lda $01 : sta $fe ; trap door - lda $07 : sta $03 : beq + - ldy $a0 : cpy #$51 : beq .specialFix ; throne room - cpy #$02 : beq .specialFix ; sewers pull switch - cpy #$71 : beq .specialFix ; castle armory - lda #$e0 - bra ++ - .specialFix - lda #$c8 - bra ++ - + - %StonewallCheck($43) - lda #$1b - ++ - sta $20 - inc $07 : stz $02 : lda #$78 : sta $22 - lda $01 : and #$03 : beq ++ - cmp #$02 : !bge + - lda #$f8 : sta $22 : stz $07 : bra ++ - + inc $02 - ++ - lda $01 : and #$04 : lsr #2 - - .layer - sta $ee - bne + - stz $0476 - + - - lda $02 : !sub $a9 - beq .skipXQuad - sta $06 : !add $a9 : sta $a9 - ldy #$00 : jsr ShiftQuadSimple - .skipXQuad - lda $aa : lsr : sta $06 : lda $03 : !sub $06 - beq .skipYQuad - sta $06 : asl : !add $aa : sta $aa - ldy #$01 : jsr ShiftQuadSimple - .skipYQuad - - lda $07 : bmi .skipCamera - ldy #$00 : jsr SetCamera ; horizontal camera - ldy #$01 : sty $07 : jsr SetCamera ; vertical camera - lda $20 : cmp #$e0 : bcc + - lda $e8 : bne + - lda #$10 : sta $e8 ; adjust vertical camera at bottom - + - .skipCamera - - jsr StairCleanup - ply : plx : plb ; pull the stuff we pushed - rts -} - -ShiftQuadSimple: { - lda.w CoordIndex,y : tax - lda $20,x : beq .skip - lda $21,x : !add $06 : sta $21,x ; coordinate update - .skip - lda.w CamQuadIndex,y : tax - lda $0601,x : !add $06 : sta $0601,x - lda $0605,x : !add $06 : sta $0605,x ; high bytes of these guys - rts -} - -SetCamera: { - stz $04 - tyx : lda $a9,x : bne .nonZeroHalf - lda.w CamQuadIndex,y : tax : lda $607,x : pha - lda.w CameraIndex,y : tax : pla : cmp $e3, x : bne .noQuadAdj - dec $e3,x - - .noQuadAdj - lda $07 : bne .adj0 - lda.w CoordIndex,y : tax - lda $20,x : beq .oddQuad - cmp #$79 : bcc .adj0 - !sub #$78 : sta $04 - tya : asl : !add #$04 : tax : jsr AdjCamBounds : bra .done - .oddQuad - lda #$80 : sta $04 : bra .adj1 ; this is such a weird case - quad cross boundary - .adj0 - tya : asl : tax : jsr AdjCamBounds : bra .done - - .nonZeroHalf ;meaning either right half or bottom half - lda $07 : bne .setQuad - lda.w CoordIndex,y : tax - lda $20,x : cmp #$78 : bcs .setQuad - !add #$78 : sta $04 - lda.w CamQuadIndex,y : tax : lda $0603, x : pha - lda.w CameraIndex,y : tax : pla : sta $e3, x - .adj1 - tya : asl : !add #$08 : tax : jsr AdjCamBounds : bra .done - - .setQuad - lda.w CamQuadIndex,y : tax : lda $0607, x : pha - lda.w CameraIndex,y : tax : pla : sta $e3, x - tya : asl : !add #$0c : tax : jsr AdjCamBounds : bra .done - - .done - lda.w CameraIndex,y : tax - lda $04 : sta $e2, x - rts -} - -; input, expects X to be an appropriate offset into the CamBoundBaseLine table -; when $04 is 0 no coordinate are added -AdjCamBounds: { - rep #$20 : lda.w CamBoundBaseLine, x : sta $05 - lda $04 : and #$00ff : beq .common - lda.w CoordIndex,y : tax - lda $20, x : and #$00ff : !add $05 : sta $05 - .common - lda.w OppCamBoundIndex,y : tax - lda $05 : sta $0618, x - inc #2 : sta $061A, x : sep #$20 - rts -} - -SpiralPriorityHack: { - lda.l DRMode : beq + - lda #$01 : rtl ; always skip the priority code - until I figure out how to fix it - + lda $0462 : and #$04 ; what we wrote over - rtl -} \ No newline at end of file diff --git a/asm/testdata/horizontaltest.txt b/asm/testdata/horizontaltest.txt deleted file mode 100644 index 8d9a7e54..00000000 --- a/asm/testdata/horizontaltest.txt +++ /dev/null @@ -1,227 +0,0 @@ -org $27A000 -DoorTable: -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ganon -dw $8000, $8000, $8000, $0450, $8000, $8000, $8000, $8000, $8000, $0452, $8000, $8000 ; HC Back Hall (x01) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0112, $8000, $8000, $8000, $8000 ; Sewer Switches (x02) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x10 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Arena (x2a) -dw $8000, $8000, $8000, $8000, $8000, $0161, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Statue (x2b) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061 ; Swamp Main (x36) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x40 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061, $8000, $8000 ;HC West Hall (x50) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Throne Room (x51) -dw $8000, $8000, $8000, $0401, $8000, $8000, $0462, $0162, $8000, $8000, $8000, $8000 ;HC East Hall (x52) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $0550, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061, $0561, $8000 ;HC West Lobby (x60) -dw $8000, $8000, $8000, $0236, $00a9, $8000, $8000, $8000, $8000, $8000, $062b, $8000 ;HC Main Lobby (x61) -dw $0452, $0152, $8000, $8000, $0561, $8000, $8000, $8000, $8000, $0203, $0203, $0203 ;HC East Lobby (x62) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;Desert Back (x63) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic L (x64) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic R (x65) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x66 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x67 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x68 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x69 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6a -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6b -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6c -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6d -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6e -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6f -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x70 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Cellblock (x80) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8) -dw $8000, $8000, $8000, $04a8, $00a8, $8000, $8000, $8000, $8000, $0161, $00aa, $8000 ; Eastern Courtyard (xa9) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xb0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xc0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xd0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xe0 diff --git a/asm/testdata/vanilla.txt b/asm/testdata/vanilla.txt deleted file mode 100644 index 8f3f4517..00000000 --- a/asm/testdata/vanilla.txt +++ /dev/null @@ -1,227 +0,0 @@ -org $27A000 -DoorTable: -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ganon -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Back Hall (x01) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Sewer Switches (x02) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x10 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Arena (x2a) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Statue (x2b) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Swamp Main (x36) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x40 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC West Hall (x50) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Throne Room (x51) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC East Hall (x52) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC West Lobby (x60) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Main Lobby (x61) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC East Lobby (x62) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;Desert Back (x63) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic L (x64) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic R (x65) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x66 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x67 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x68 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x69 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6a -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6b -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6c -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6d -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6e -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6f -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x70 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Cellblock (x80) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Courtyard (xa9) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xb0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xc0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xd0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xe0 diff --git a/asm/testdata/verticaltest.txt b/asm/testdata/verticaltest.txt deleted file mode 100644 index 89c79232..00000000 --- a/asm/testdata/verticaltest.txt +++ /dev/null @@ -1,227 +0,0 @@ -org $27A000 -DoorTable: -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Ganon -dw $8000, $8000, $8000, $0450, $8000, $8000, $8000, $8000, $8000, $0452, $8000, $8000 ; HC Back Hall (x01) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0112, $8000, $8000, $8000, $8000 ; Sewer Switches (x02) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x10 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x20 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Arena (x2a) -dw $8000, $8000, $8000, $8000, $8000, $0161, $8000, $8000, $8000, $8000, $8000, $8000 ;PoD Statue (x2b) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x30 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0061 ; Swamp Main (x36) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; x40 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $0462, $0061, $8000, $8000 ;HC West Hall (x50) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;HC Throne Room (x51) -dw $8000, $8000, $8000, $0401, $8000, $8000, $0162, $0660, $8000, $8000, $8000, $8000 ;HC East Hall (x52) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $0152, $8000, $8000, $8000, $8000, $8000, $8000, $0061, $0561, $8000 ;HC West Lobby (x60) -dw $8000, $8000, $8000, $0236, $0160, $8000, $8000, $8000, $8000, $8000, $0162, $8000 ;HC Main Lobby (x61) -dw $0650, $0452, $8000, $8000, $0561, $8000, $8000, $8000, $8000, $0203, $0203, $0203 ;HC East Lobby (x62) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;Desert Back (x63) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic L (x64) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;TT Attic R (x65) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x66 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x67 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x68 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x69 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6a -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6b -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6c -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6d -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6e -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x6f -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ;x70 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; HC Cellblock (x80) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Vitreous (x90) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Mire Pre-Vitreous (xa0) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Trinexx (xa4) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Compass (xa8) -dw $8000, $8000, $8000, $04a8, $00a8, $8000, $8000, $8000, $8000, $0161, $00aa, $8000 ; Eastern Courtyard (xa9) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; Eastern Map (xaa) -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xb0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xc0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xd0 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 -dw $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000, $8000 ; xe0 From f4021afac0d3b19627fb35b3fe5eafe1d463f264 Mon Sep 17 00:00:00 2001 From: aerinon Date: Fri, 14 Nov 2025 14:37:46 -0700 Subject: [PATCH 04/12] feat: free_lamp_cone as experimental feature --- BaseClasses.py | 3 ++- ItemList.py | 18 ++++++------------ Main.py | 4 ++-- Rom.py | 5 +++-- Rules.py | 2 +- data/base2current.bps | Bin 118196 -> 118191 bytes 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 6a12f32e..3b06f10b 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -69,7 +69,6 @@ class World(object): self.dynamic_locations = [] self.spoiler_mode = spoiler_mode self.spoiler = Spoiler(self) - self.lamps_needed_for_dark_rooms = 1 self.doors = [] self._door_cache = {} self.paired_doors = {} @@ -123,6 +122,8 @@ class World(object): set_player_attr('bombbag', False) set_player_attr('flute_mode', False) set_player_attr('bow_mode', False) + set_player_attr('free_lamp_cone', False) + set_player_attr('difficulty_requirements', None) set_player_attr('boss_shuffle', 'none') set_player_attr('enemy_shuffle', 'none') diff --git a/ItemList.py b/ItemList.py index 3dce2da3..32da56cc 100644 --- a/ItemList.py +++ b/ItemList.py @@ -266,13 +266,13 @@ def generate_itempool(world, player): # set up item pool skip_pool_adjustments = False if world.customizer and world.customizer.get_item_pool() and player in world.customizer.get_item_pool(): - (pool, placed_items, precollected_items, clock_mode, lamps_needed_for_dark_rooms) = make_customizer_pool(world, player) + (pool, placed_items, precollected_items, clock_mode) = make_customizer_pool(world, player) skip_pool_adjustments = True elif world.custom: - (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, lamps_needed_for_dark_rooms) = make_custom_item_pool(world, player, world.progressive, world.shuffle[player], world.difficulty[player], world.timer, world.goal[player], world.mode[player], world.swords[player], world.bombbag[player], world.customitemarray) + (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon) = make_custom_item_pool(world, player, world.progressive, world.shuffle[player], world.difficulty[player], world.timer, world.goal[player], world.mode[player], world.swords[player], world.bombbag[player], world.customitemarray) world.rupoor_cost = min(world.customitemarray[player]["rupoorcost"], 9999) else: - (pool, placed_items, precollected_items, clock_mode, lamps_needed_for_dark_rooms) = get_pool_core(world, player, world.progressive, world.shuffle[player], world.difficulty[player], world.treasure_hunt_total[player], world.timer, world.goal[player], world.mode[player], world.swords[player], world.bombbag[player], world.doorShuffle[player], world.logic[player], world.flute_mode[player] == 'active') + (pool, placed_items, precollected_items, clock_mode) = get_pool_core(world, player, world.progressive, world.shuffle[player], world.difficulty[player], world.treasure_hunt_total[player], world.timer, world.goal[player], world.mode[player], world.swords[player], world.bombbag[player], world.doorShuffle[player], world.logic[player], world.flute_mode[player] == 'active') if player in world.pool_adjustment.keys() and not skip_pool_adjustments: amt = world.pool_adjustment[player] @@ -351,8 +351,6 @@ def generate_itempool(world, player): if item.name == 'Bomb Upgrade (+10)' and item.player == player: item.advancement = True - world.lamps_needed_for_dark_rooms = lamps_needed_for_dark_rooms - if clock_mode is not None: world.clock_mode = clock_mode @@ -946,8 +944,6 @@ def get_pool_core(world, player, progressive, shuffle, difficulty, treasure_hunt else: pool.extend(basicgloves) - lamps_needed_for_dark_rooms = 1 - # old insanity shuffle didn't have fake LW/DW logic so this used to be conditional pool.extend(['Magic Mirror', 'Moon Pearl']) @@ -1048,7 +1044,7 @@ def get_pool_core(world, player, progressive, shuffle, difficulty, treasure_hunt pool.extend(['Small Key (Universal)']) else: pool.extend(['Small Key (Universal)']) - return (pool, placed_items, precollected_items, clock_mode, lamps_needed_for_dark_rooms) + return (pool, placed_items, precollected_items, clock_mode) item_alternates = { @@ -1152,8 +1148,6 @@ def make_custom_item_pool(world, player, progressive, shuffle, difficulty, timer diff = difficulties[difficulty] - lamps_needed_for_dark_rooms = 1 - # expert+ difficulties produce the same contents for # all bottles, since only one bottle is available if diff.same_bottle: @@ -1213,7 +1207,7 @@ def make_custom_item_pool(world, player, progressive, shuffle, difficulty, timer pool.remove('Fighter Sword') pool.append('Rupees (50)') - return (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon, lamps_needed_for_dark_rooms) + return (pool, placed_items, precollected_items, clock_mode, treasure_hunt_count, treasure_hunt_icon) def make_customizer_pool(world, player): @@ -1357,7 +1351,7 @@ def make_customizer_pool(world, player): pool.remove('Fighter Sword') pool.append('Rupees (50)') - return pool, placed_items, precollected_items, clock_mode, 1 + return pool, placed_items, precollected_items, clock_mode filler_items = { diff --git a/Main.py b/Main.py index 197602e2..5a67ca15 100644 --- a/Main.py +++ b/Main.py @@ -171,7 +171,7 @@ def main(args, seed=None, fish=None): world.finish_init() # custom settings - these haven't been promoted to full settings yet - in_progress_settings = ['force_enemy'] + in_progress_settings = ['force_enemy', 'free_lamp_cone'] for player in range(1, world.players + 1): for setting in in_progress_settings: if world.customizer and world.customizer.has_setting(player, setting): @@ -494,7 +494,6 @@ def copy_world(world): ret.can_take_damage = world.can_take_damage ret.difficulty_requirements = world.difficulty_requirements.copy() ret.fix_fake_world = world.fix_fake_world.copy() - ret.lamps_needed_for_dark_rooms = world.lamps_needed_for_dark_rooms ret.mapshuffle = world.mapshuffle.copy() ret.compassshuffle = world.compassshuffle.copy() ret.keyshuffle = world.keyshuffle.copy() @@ -502,6 +501,7 @@ def copy_world(world): ret.bombbag = world.bombbag.copy() ret.flute_mode = world.flute_mode.copy() ret.bow_mode = world.bow_mode.copy() + ret.free_lamp_cone = world.free_lamp_cone.copy() ret.crystals_needed_for_ganon = world.crystals_needed_for_ganon.copy() ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy() ret.crystals_ganon_orig = world.crystals_ganon_orig.copy() diff --git a/Rom.py b/Rom.py index 04987530..ec343ee7 100644 --- a/Rom.py +++ b/Rom.py @@ -42,7 +42,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '1e87ad01a54f1c15e2ec16a79a9bcc20' +RANDOMIZERBASEHASH = 'f327962e7f2872c80fd75b35c6f2c985' class JsonRom(object): @@ -811,7 +811,8 @@ def patch_rom(world, rom, player, team, is_mystery=False): rom.write_bytes(0x6D323, [0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E]) # set light cones - rom.write_byte(0x180038, 0x01 if world.sewer_light_cone[player] else 0x00) + lamp_cone_flags = (0x1 if world.sewer_light_cone[player] else 0) | (0x10 if world.free_lamp_cone[player] else 0) + rom.write_byte(0x180038, lamp_cone_flags) GREEN_TWENTY_RUPEES = 0x47 TRIFORCE_PIECE = ItemFactory('Triforce Piece', player).code diff --git a/Rules.py b/Rules.py index 5d059a5c..19dc9922 100644 --- a/Rules.py +++ b/Rules.py @@ -160,7 +160,7 @@ def and_rule(rule1, rule2): def add_lamp_requirement(spot, player): - add_rule(spot, lambda state: state.has('Lamp', player, state.world.lamps_needed_for_dark_rooms)) + add_rule(spot, lambda state: state.has('Lamp', player) or state.world.free_lamp_cone[player]) def forbid_item(location, item, player): diff --git a/data/base2current.bps b/data/base2current.bps index a287a08d9090504aa003b5e346d481fe5fdad888..f2b1f9252dcd8bf45d222cc667e40bebec06f83d 100644 GIT binary patch delta 7371 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 F{{uxx<%0kK From 0c50e08cdc736afe4f6c9b8c2271166e3548480d Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 20 Nov 2025 10:12:56 -0700 Subject: [PATCH 05/12] feat: rom fixups, update docs --- PastReleaseNotes.md | 10 ++++++++++ RELEASENOTES.md | 24 +++++++++++++----------- Rom.py | 2 +- data/base2current.bps | Bin 118191 -> 118335 bytes docs/Customizer.md | 4 +++- 5 files changed, 27 insertions(+), 13 deletions(-) diff --git a/PastReleaseNotes.md b/PastReleaseNotes.md index fa8d1286..dbdc2f12 100644 --- a/PastReleaseNotes.md +++ b/PastReleaseNotes.md @@ -5,6 +5,16 @@ # Patch Notes Changelog archive +* 1.4.11 + * Rom fixes (all thanks to Codemann, I believe) + * Pot bug when at sprite limit + * Kodongo AI vanilla in vanilla rooms + * Issue with music silencing across certain room transitions + * Glitched: Some HMG logic fixed. Thanks Muffins! (Sorry it took me forever to get this PR in) + * Glitched: Blind fight VRAM fix. Thanks Mufffins! + * Text: Updated tourney winners. Thanks clearmouse! + * Enemizer: Banned Swamola enemy everywhere as they may be causing crashes + * Enemizer: Enemy bans from Q2 and Q3. Thank you for all the reports. * 1.4.10 * Logic: Changed the rule surrounding the Bumper Cave Ledge Drop (the murderdactyl) to only require Pearl AND (Cape OR Byrna OR a Sword) in OHKO mode for now. This is a temporary solution until a better way to prevent needing to use a framerule to get past the bird is invented. * Helmacopter Fix. diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 9e672645..cdcadb7b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -1,13 +1,15 @@ # Patch Notes -* 1.4.11 - * Rom fixes (all thanks to Codemann, I believe) - * Pot bug when at sprite limit - * Kodongo AI vanilla in vanilla rooms - * Issue with music silencing across certain room transitions - * Glitched: Some HMG logic fixed. Thanks Muffins! (Sorry it took me forever to get this PR in) - * Glitched: Blind fight VRAM fix. Thanks Mufffins! - * Text: Updated tourney winners. Thanks clearmouse! - * Enemizer: Banned Swamola enemy everywhere as they may be causing crashes - * Enemizer: Enemy bans from Q2 and Q3. Thank you for all the reports. - +* 1.5.0 + * Logic: Fixed vanilla key logic for GT basement + * Enemy Drop: Added "spies" and shadows for hidden enemies when enemy drop shuffled is enabled + * Keysanity/Keydrop Menu for DR: + * Map is no longer required to see key counts for dungeons if not shuffled. This information is available right away in the menu. + * The key counter on the HUD for the current dungeon now accounts for keys from enemies or pots that are from vanilla key locations. + * The first number on the HUD represents all keys collected either in that dungeon or elsewhere. + * The second number on the HUD is the total keys that can be collected either in that dungeon or elsewhere. + * The key counter on inside the Menu is unchanged. (At the bottom near A button items) + * The first number in the Menu is the current number of keys in your inventory + * The second number is how many keys left to find in chests (not those from pots/enemies unless those item pools are enabled) + * Customizer: free_lamp_cone option added. The logic will account for this, and place the lamp without regard to dark rooms. + * Customizer: force_enemy option added that makes all enemies the specified type if possible. There are known gfx glitches in the overworld. diff --git a/Rom.py b/Rom.py index ec343ee7..e578b626 100644 --- a/Rom.py +++ b/Rom.py @@ -42,7 +42,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'f327962e7f2872c80fd75b35c6f2c985' +RANDOMIZERBASEHASH = '53a99b36f47fcb81c372d03e3559c590' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index f2b1f9252dcd8bf45d222cc667e40bebec06f83d..10648e5996a60f78b6841926803221e6af09f7d3 100644 GIT binary patch delta 6049 zcmWky30xD$_urQQ30DBQ@3115Ab2ZMLGeHY#j_qkXuZIwXtm-|!)zcx&=|rP28fUd zB1FVcQ;mpf#)lYd6% zfRvOfrBKdk)&(PmIijMe=XkI6UWmaTtW({N{Z-q4q?-QauUfizNO5!-#k4NKBAZ#Z z_D^f+Z+}&YYH^cID&*kzHmATE8+iT@h;Q*W!45oyKiTf^&$=F){uzwC7fbjP;RHU- ze+}nxqwPsZ#w+bgpb`INcN?DJ)Aq5j62G>ugzb2rgD)(@4GxL?h`YMCDnuLb8;8p< z3ZHhYfnK~sumnPJlVFrkcTIOuMQ^TX==Zy%rbWd^`ui74Rdm5my8a}Yiauz3F92JZ zZ~Wl706>mYy)!^(Z1#=<-p!}A{XO!L_>s?1x6rG)3N@Wns_O|N%L>lz`=d)9iZ#C3 zPJ&LI7h|H&F^jcQo%|Q<>Ng6;mPp(fwAPk9UX9gaPBl@Ce{PyQzz0 z)buF)CgQFW`&;zRZe3~Rlpl4p%}xCC$Q;;*XGEsC|L1va{}!p5{^E+RzyG) z#%*J40eX#l$1dW+O5>dg)%@_mGn&-(iv5+&p`|>%Q)mj3)9AxHOTMOPlw_1{#`+wg$|KX#X!6260T#;|E`!T(vS?gfLK z**%?k|44regB;jtvz=+|Dn7%L6X&p=lb<*e-Wd&vSHRuarQ4!mly9*|<1dV+h0#2d z)BU)3W{}UvE?vKl(HvqlBJ@a9cum(|l6Vq0PskY#yYY&g z%`n5*o#Sr>JB?4b{@m2_yZu!sNcDY0~?I|J+nZ-`VX=9syoEgl*;HI zjH2&0J3AveQGMDAoS( zvw>~c$a>9+%GbuQgEB{ha=%*1_9`FYs_LvTaT3kCvvxs&!pX2{K)D$)bCgo{+KTXt zV*#8H8Fpw2=2#cuF-=opI^N1EBZ@F-^5=Nu>JrD9x zCcc%>qyMZmZ2tUQwlO%pm6&Y}amu^*;#h6OTS+o|c;&Eya$;JZAw;{X0E>=40)ITU z*(YStGz!U2$~ePO+H?x34drQhv9U^pTCbH+dg&D8faEETSFohnn>TqDh2~19;+kff z<9q>kG%pE{W>m{NQv9zpOf0|x={+aq;R_Oj?t;YZ^tshLO?t(4U^m$voN&TDNVBU- zMYY8C2{X_*Rdb)vz#6-$o=N(_`Dj&sGy9mGC!WG0oM}jPmv`zkaVy^ITdeg8K+%Q+ z0}{LocNoH#e%E;^shPv+b~0OMiM;z{!Ee+4hkY+Hd@Ow=K<yA6TH)o!ZFvW}#r2f%`gL)8!et5F^hv5+>(huQgb!-s z!w2zH7H6|Ki^cgY&SUXQ7MHS^!Qv_w*R!~e#T*tlvzW``4i@uRl!OnK=dJ9lb~bZU z4s;vLWIa+V&7Bg%8;yWbz3G(Txj(4jI{y8K7(sOSprQh8s4t_C)+!47o?2m-KI4%> zbbP2tGYRLNO3lliI#`uqt1fBL9y?Jdv;VQF=ENZ!96wlRA3tc2vK>`tWqm@8AZ}1L z>{MBP(_EHmGwZ1as@=$mVPqXKRjx>u{$thAeWyuk!XT4Q;^GHu5(=B2Ju7w|$TW;) zgW9%c;Wzr{V!cIi-AZiOG9WR##okUFkd!(aaO!DCdwJ~bT>Kqka@IE&9`r}L%1D5nMzh5P>4CL<3WTc zwJKm6zSkQU$rk>poYw?Yscq}SYL;!$n0<^|;peGujh zF?RMys@X2R`>nKmLc*WE2!>ZKM2ogPWvmCpX+Omx8)uY=s9i7Gxh^+nF`}por!Ly{ z@IKSxFf+$1GqY;FfBT)6xT7r`Ug8&R5!Q*5nGg>4J-3~+#|NvGyl~wOW?|>M-Z0r1aaYZ;cT4{Lg7vV|u1J(+ynZi$&#^m;`+pAsC+zZI z1gyprAH=hPlKbGle&41P-79rD*52_;ZKKng0f~~mQmpUmsf&gLyz!5bo}0!OT}m)} z85pLeXP6>&Z_~et**cg!iZ0pN55>xt(o>#D)=Mb9^x~ zLYsLOyN_W7EM-P0rOMs;WOrmS6GB|tm=Nu_Hk{2GLs(;oQYsI5DUy1oQCNSK~q*S~}+sNP28a ze3UF^iJN;lJ&`zjCSp9bR#qkQ^EyZ6Cz6T}yb2r_$t}V5%j6AqOXY!R&r-QY6eZUr z7s|54btAu)%kMm`C3ZZdNO(}Y8&5=ax&IAByYZt}u53OWd^OsU|F_KS@sn_710&X^ z;IZb=c?d(LJGl zCLZ=Wign|J*TaLihV>G^uwF&J<%5MRPppvVTiP|d6DtU7P+hjPTZ)=!T=aUiV0eTL zsx(-%7K6p4*^b}6PPES0(MYD^gg3z;Hm-dmaQ4`7M#oMsRJ$|jz~hqY%}k3dWk{qZ zat=JT|0=Ucal4#pA;~#p4;Oy5_L1DjlT9nF;0C}l5^4j(A;L7*2BJA|kL=;YYWvhl z3YD|WPn=YjL!R?tF^nKnZ6U@ndm)m2^Ol6C{NKMKDcNHS2d!qE(Jm#fcCgrX!5N+C z*E>4;SF*(pJl#Hv!(}=;T%~$pHne zJ@&QDWx9vX!uEY=v|&F(&_>|MYuuM@6P zR9hR0-bloHp+=mpXr9^2-#53Zz9c-sJdvz?l5QIGhIDYZ&r!5`X)-TRR96?WwpeP{ z)M+`U^}g`X)^GG`#T_oCA4ipP^}{&I3sWSSPRNOKawOT1X<9u3ZUHYR=m7IpBQ#A6 zg)EMB)FfGxjp;}@yt5jn=6^0Zf5iLMg3m$^-fucS3Sz8;Bi)M>)|A;+>tS8=Uz)iaSRNBVEC58%AU7b`Y+Hl&F=9gtML#8aM(0v0xSneBl{;p zI0#IqC&E#Ch$ZQXumQd`btOWG9axiBsSp9qCZBom$O`V8J}!iLVDoK2rN;G3Q`%zC zT7f??FJoVs{RwY5#5%53N)J05IH*C+F)t(YmV?L4W-D_XTV8EoTI2~7$;p*}f3X6Y z!%C8Sz~`9Z8)C~nFz9sN{8s2vp{Tv4j|o#8xz;W;H+Gme^1f6zG`44&8!Bgbbam+mgIUx>PciF}nJ;`nzF7gG zdD}zWkal*yCUkF=%4{PXUePoGH1gh~lr}e?q-T@@`aH4Vp}v@QXLE~;WB7*6D7N*S zNfx%KmvQPj9Wi9y+R}OiLtR}D9VxR78I8(@B@|ZrQZ3vRDAz=DG%9v>2MPWfF%HC! ztC8u0OuMAjgTaa?D?Jp!o^=JoQJLIESf?yB9;sUHUZ_CkklqIWg|91PgbOP=V(RM> z7QU9%^N315gzQOytgB1AozYq|+Jakr61ICt+}nPfG#nHDMp&^V8HY%*|3Z?r62kab zNyAX4*3F7ktb|GalM3Y?VVTPAbaXMe$0?~-UvR9$nRYd?^}|pW>0JpSkU>BMo}QVt za=ziMvQXdS(ifxml%>CX$RVyvNwf$?*n3yC*b6%$ranPy#VXI-v{I7Hn$!iX_Rg&-mmSXDLoTt8<5}-@MQxGa zkv~Kb;F0QDskW`R>vpDyaLRr~y{>zLDd9`vnhvy!chyh}x1JK~0mRt}REmYnN{2D< z1=*DjA)KHna+p=Qvy0c5?x({AE8DqCR5IkUNE&Ra{u;(|?A)yWcRI`O#Bj8h^sa$c z{_62ES%))TY0|6(#Nq56NBpy36u6mEvS1j1kz`~;42R!pQe{I4M$-6BUvwyfHzO&TKd-m)Z8~o4P+DD#hJSvb0 z+PyOK5cnM74~-C*d9_l3;rf6?yk;Z)@?S(>d5pwK&856@$(EwSl%kYZjd)qTbwL4I zRnzaatgp=%1J8kM4R|mAbf!@g8}OcFiorcJX|>kqo~>rwP14E^q5f(say1ov&q_O5 zSzeOy&m&${*wUlqkQkyk8)lOmVh9S%UF42bA1xNk^ftG}?r0w%BZZhh+oa6PrawYQ znd~=0zNbwheIEO-F&)f@D860VnnpQo@zU@%nr`fa8CKTOYg_B$O>U)dl4B#9@`&u1 zX1ZAhW4XiZW;M#~^Xkeng|K$!e2#CB%YL)Y!9!A6o`2PucT!9iMz%1=}1rV;`t3mj76=g{(0>s)AiK ztT(MZ4_%zlRy*47Nuhq2Nc3CbXURwo*la}#(Y%v2xK!?VvZg#Yw^RuvVnd0X`b0H+MXp_fQ8tlI4oI6rK3sy`;6rwF zz-af`U)m$JIcJDH$&@z5yPS79L`cqcKrqZ8k2)YDLNe$5(bZN(>Q~ENta!2FSe8{0 z{wm}anI3sdkw7I-9S77DqNY(Xb>ET=mq7*z#C(~h(hL%R1%?kBGvj7QK$5)7`ny7A zQr%pn*+sTrfp|gEoT{4npzcTkb=%kleyelX_s0xjgnF}Bx3hcq*+9!UuBDmsbt+%miv8)>MErAkD@eqi7P&RP(g7h8cX7l zX51!KS*a|(U7JEaT!p}3mt7|H>YRtKF8)Dgd7e?B3+RG#+2lxcSV#$}AS#iXf7zZ) zy#}Su315AzKV$K;a4ep$oL`agrv9`k^Zp*!>IO7Q7)eQw8Al2RAX}dh@jJ%C%Gj1p6yCEnx`itAz8UDAc zeCE^~b(vFB(fZE5b5}=Mm>*IJ6@wyK2 zkV%$ZhajJ?zOhF{W@?D~*HE6F;5q2l|I%K%Ut~{%7paQ6lQZ>b+B$T3V z3bDQc$&f_SZa_4h$MZz;49db~;+A@#j?jpbvdQ0cGXprHU2&Ppr?gwi;Ty0wZ$k7i z)N!EAw^ixfaI6$hPG@=6Yr<89C*@1Ef4QMeJA-yW)dSRf>KE!6)jpfm$j(jnsC>kj zHub;M9_oMZ%45AAY1XrSnk;X2z7MEMiicxSjq92t%HYDX;<{}UQ`wt*Q&C4r9bLw} z!md|&j2pS|<`zY&Z?d`Hll*WKCeEI|=?s&Hb5PTsLq{v>Hm!(8icjo*lEo7$Paecu zT-=c|xQ)yyU_RckomFD;i7$~+RQuj+0V4eM0#p;UKEG;}c|I9)3%=!Vh!BhqJS}+p E{|{Yy;Q#;t delta 5811 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 ma*FEWZE!@yF~ Date: Tue, 2 Dec 2025 09:46:09 -0700 Subject: [PATCH 06/12] fix: perf optimization fix: playthrough calc and drop rules refactor: using compass_mode for map info --- BaseClasses.py | 4 ++-- Fill.py | 2 ++ RELEASENOTES.md | 4 +++- Rom.py | 2 +- Rules.py | 11 ++++++----- data/base2current.bps | Bin 118335 -> 118393 bytes 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 3b06f10b..3d7e80b5 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -2279,7 +2279,7 @@ class Location(object): self.staleness_count = 0 self.locked = False self.real = not crystal - self.always_allow = lambda item, state: False + self.always_allow = None self.access_rule = lambda state: True self.verbose_rule = None self.item_rule = lambda item: True @@ -2293,7 +2293,7 @@ class Location(object): def can_fill(self, state, item, check_access=True): if not self.valid_multiworld(state, item): return False - return self.always_allow(state, item) or (self.parent_region.can_fill(item) and self.item_rule(item) and (not check_access or self.can_reach(state))) + return (self.always_allow and self.always_allow(state, item)) or (self.parent_region.can_fill(item) and self.item_rule(item) and (not check_access or self.can_reach(state))) def valid_multiworld(self, state, item): if self.type == LocationType.Pot and self.player != item.player: diff --git a/Fill.py b/Fill.py index c6189460..70864fce 100644 --- a/Fill.py +++ b/Fill.py @@ -137,6 +137,8 @@ def fill_restrictive(world, base_state, locations, itempool, key_pool=None, sing spot_to_fill = None item_locations = filter_locations(item_to_place, locations, world, vanilla) + if is_dungeon_item(item_to_place, world): + item_locations = [l for l in item_locations if valid_dungeon_placement(item_to_place, l, world)] verify(item_to_place, item_locations, maximum_exploration_state, single_player_placement, perform_access_check, key_pool, world) for location in item_locations: diff --git a/RELEASENOTES.md b/RELEASENOTES.md index cdcadb7b..a5d2e8a1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -2,9 +2,10 @@ * 1.5.0 * Logic: Fixed vanilla key logic for GT basement + * Logic (Playthrough): Fixed an issue where enemy kill rules were not applied during playthrough calculation. (Thanks Catobat for the catch) * Enemy Drop: Added "spies" and shadows for hidden enemies when enemy drop shuffled is enabled * Keysanity/Keydrop Menu for DR: - * Map is no longer required to see key counts for dungeons if not shuffled. This information is available right away in the menu. + * Map key information is now controlled by the Dungeon Chest Counts setting. If set to always on, this information will be available right away in the menu. And will be on the HUD even when the map is not obtained. * The key counter on the HUD for the current dungeon now accounts for keys from enemies or pots that are from vanilla key locations. * The first number on the HUD represents all keys collected either in that dungeon or elsewhere. * The second number on the HUD is the total keys that can be collected either in that dungeon or elsewhere. @@ -13,3 +14,4 @@ * The second number is how many keys left to find in chests (not those from pots/enemies unless those item pools are enabled) * Customizer: free_lamp_cone option added. The logic will account for this, and place the lamp without regard to dark rooms. * Customizer: force_enemy option added that makes all enemies the specified type if possible. There are known gfx glitches in the overworld. + * Optimization: Improved generation performance (Thanks Catobat!) diff --git a/Rom.py b/Rom.py index e578b626..c810534e 100644 --- a/Rom.py +++ b/Rom.py @@ -42,7 +42,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '53a99b36f47fcb81c372d03e3559c590' +RANDOMIZERBASEHASH = '76d6a1915f52950e1b4b6d0fba95296b' class JsonRom(object): diff --git a/Rules.py b/Rules.py index 19dc9922..a1ebe18a 100644 --- a/Rules.py +++ b/Rules.py @@ -996,13 +996,14 @@ def drop_rules(world, player): for super_tile, enemy_list in data_tables.uw_enemy_table.room_map.items(): for enemy in enemy_list: if enemy.location: - rule = defeat_rule_single(world, player, enemy, enemy.location.parent_region) - if enemy.location.parent_region.name in special_rules_check: - rule = special_rules_for_region(world, player, enemy.location.parent_region.name, - enemy.location, rule) + true_location = world.get_location(enemy.location.name, player) + rule = defeat_rule_single(world, player, enemy, true_location.parent_region) + if true_location.parent_region.name in special_rules_check: + rule = special_rules_for_region(world, player, true_location.parent_region.name, + true_location, rule) if rule.rule_lambda is None: raise Exception(f'Bad rule for enemy drop. Need to inspect this case: {hex(enemy.kind)}') - add_rule_new(enemy.location, rule) + add_rule_new(true_location, rule) def ow_inverted_rules(world, player): diff --git a/data/base2current.bps b/data/base2current.bps index 10648e5996a60f78b6841926803221e6af09f7d3..7528406538289ca931deb536e97b8a6718bebb73 100644 GIT binary patch delta 9245 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 From 8b40c13d1ccf465335f88a7745130feecbd366de Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 2 Dec 2025 11:10:56 -0700 Subject: [PATCH 07/12] fix: crash --- RELEASENOTES.md | 3 ++- Rom.py | 2 +- data/base2current.bps | Bin 118393 -> 118398 bytes 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index a5d2e8a1..b614f702 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -4,8 +4,9 @@ * Logic: Fixed vanilla key logic for GT basement * Logic (Playthrough): Fixed an issue where enemy kill rules were not applied during playthrough calculation. (Thanks Catobat for the catch) * Enemy Drop: Added "spies" and shadows for hidden enemies when enemy drop shuffled is enabled + * Pottery: Pots will uncolor when the item inside is collected next time the room is loaded * Keysanity/Keydrop Menu for DR: - * Map key information is now controlled by the Dungeon Chest Counts setting. If set to always on, this information will be available right away in the menu. And will be on the HUD even when the map is not obtained. + * Map key information is now controlled by the Dungeon Chest Counts setting. If set to always on, this information will be available right away in the menu and will be on the HUD even when the map is not obtained. * The key counter on the HUD for the current dungeon now accounts for keys from enemies or pots that are from vanilla key locations. * The first number on the HUD represents all keys collected either in that dungeon or elsewhere. * The second number on the HUD is the total keys that can be collected either in that dungeon or elsewhere. diff --git a/Rom.py b/Rom.py index c810534e..f71b43c4 100644 --- a/Rom.py +++ b/Rom.py @@ -42,7 +42,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '76d6a1915f52950e1b4b6d0fba95296b' +RANDOMIZERBASEHASH = '98131bfbcb4f2f305befa7a0ae7dc44d' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 7528406538289ca931deb536e97b8a6718bebb73..fb4e4e514484792328e6b83dc0ba822036337a57 100644 GIT binary patch delta 686 zcmWkpYe-XZ9R2_9)jia7x`$H(uaBmEY7`myT;V5?ATwf{E9rsRj6_PJmv<|rscYF~ z{x%m)&3TU(>aH8;GFa4rF8G5G)&QSy!Hr} zNS{cY@$mT{xl^BqIZS@iTY6I`WPFodm6s&#CX#P!S0he$9b9ksd>73D_d< z+S@m^xo$4|2D?-?MX`K5d0sKt!Sp_l)#hTo5lTCnT=pTwzU809+-TQ~h#5YY51xY1Zl0h^iiKw_&m|}ukidD3Gr6f+*uJ*eq zHgp<$Opupf;pVj+MmImUzs6gwSzZqQDiqOotV{^9f{fY1RTC5y-PNgBTN@tF^4ijT z2b$PELBbsJgi^uhSRW-^$K(CUcn-B@&_NwmnIT(A_xq%juTQM(NA5CfOTpXNVuq}P z0asUKWWcEIa*FTP`MkOxUOiLqnb!wiSL2YF$V$TEd%M>4xk=>5nGF1P3nAvIB`a)qQPBefnIcFf8%q)7t z<;)sxG(b`5nm63)H(b)Nor@~}g=P)wl`xNjODg{h)7yZ-pCF3wD!(1ih?e__sCHDL z`(oU0z$y!9CGv+#c1DjD3*@Q`GQ4hiAZbNGu!E ztjz{e3%F!~qoBkc3z+Dtr{&S}7eRjw3bAVe3c(N!Ex=zoQ9^v2F**^0MTzXJG3uF~ HtR(*dpnw|f delta 782 zcmW-dT}%^c6o$WV2IxQqE0zlWB*TwYl9d377{y>U#tYIIL)?qDpvHt%tcxo#Y$OU_ zo0d3GtS~93)1t$wWf+N>3B5q$5>}LLF&dhU2^->Ok=4X29aoLo_&0cU&Xf0?llMJe zh72Ev3@Sy_&GrbNNpH*iJuH>{#qXwVc%1jrP6kJ$%@;!@miROJeGWbyf0FmG0N2Ik zvZw2Cd%V}SqXv89f3~+T6|y0I?Flkdt58Hr8K+IdU2Nb|!p_1$2j0Fy7cSaA66}s&k2ngt`}DL6Qfb3$p_2VEJY5;P zwy)u}KW2b_E=`Q!^Cy$y8IPFh5q*!0u(>1cUYJrqy21VndfQXaTfKZK{O!W!hFOr( zN5ocO8u7V`=3)Kw)sdQxo|~z1Mf)nv3~MIkfBvVd9HYDqcFU<%OO^5(f78oF3W{L7 z5nGMxBdU>|5!9XRJp9*)H+9Vm>M!D+!xrMdZx$Ub79wP^o$`!X9B|%>*~APTUYJEM z9MGkZPp1#&vGe-)_Z<&2z-%O9z+afH_~H!VWB=zw)k)>? F&^Ix{Q;Glp From 0bf6f5f0da02faced888801eb8bf58d584c15e23 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 3 Dec 2025 10:53:30 -0600 Subject: [PATCH 08/12] Merged in DR v1.5.0 --- Rom.py | 2 +- data/base2current.bps | Bin 138591 -> 138568 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index f4ffb56e..673bafd8 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '59b577d7bbbde676a16f0ff779be9e58' +RANDOMIZERBASEHASH = '5d9af807fe843aa8af4dd3fd0a539dd8' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 5dc37ae738ded32dfe265d76ebed9716e9ee0e4d..aad0f7ece26cb5d4ca243fb61cb91a85b6ef972c 100644 GIT binary patch delta 2116 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 From f9a11484a93c0fca14144e8be6857e4a5b804f48 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 3 Dec 2025 10:53:30 -0600 Subject: [PATCH 09/12] Merged in DR v1.5.0 --- Main.py | 2 +- Rom.py | 2 +- data/base2current.bps | Bin 138591 -> 138568 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Main.py b/Main.py index bc2d4eb3..a25f6bc0 100644 --- a/Main.py +++ b/Main.py @@ -969,7 +969,6 @@ def copy_world_premature(world, player, create_flute_exits=True): ret.can_take_damage = world.can_take_damage ret.difficulty_requirements = world.difficulty_requirements.copy() ret.fix_fake_world = world.fix_fake_world.copy() - ret.lamps_needed_for_dark_rooms = world.lamps_needed_for_dark_rooms ret.mapshuffle = world.mapshuffle.copy() ret.compassshuffle = world.compassshuffle.copy() ret.keyshuffle = world.keyshuffle.copy() @@ -978,6 +977,7 @@ def copy_world_premature(world, player, create_flute_exits=True): ret.bombbag = world.bombbag.copy() ret.flute_mode = world.flute_mode.copy() ret.bow_mode = world.bow_mode.copy() + ret.free_lamp_cone = world.free_lamp_cone.copy() ret.crystals_needed_for_ganon = world.crystals_needed_for_ganon.copy() ret.crystals_needed_for_gt = world.crystals_needed_for_gt.copy() ret.crystals_ganon_orig = world.crystals_ganon_orig.copy() diff --git a/Rom.py b/Rom.py index f4ffb56e..673bafd8 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '59b577d7bbbde676a16f0ff779be9e58' +RANDOMIZERBASEHASH = '5d9af807fe843aa8af4dd3fd0a539dd8' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 5dc37ae738ded32dfe265d76ebed9716e9ee0e4d..aad0f7ece26cb5d4ca243fb61cb91a85b6ef972c 100644 GIT binary patch delta 2116 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 From e3e65f0540fca5be496d2415d09f16e1314254ab Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 4 Dec 2025 19:51:51 -0600 Subject: [PATCH 10/12] Some fixes for DR v1.5.0 --- Rom.py | 2 +- data/base2current.bps | Bin 138568 -> 138590 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 673bafd8..e9c5aeb6 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '5d9af807fe843aa8af4dd3fd0a539dd8' +RANDOMIZERBASEHASH = '9d085dce549f626cc98c69fa7c9b846c' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index aad0f7ece26cb5d4ca243fb61cb91a85b6ef972c..429fb90aa295145575593140cd5a9fab10914ff2 100644 GIT binary patch delta 516 zcmV+f0{i{Qx(MF72(U5(1cw56{gXBWHU$ltry?VhaRWdC1DTVv16c@Cnx`m^l_F=e z6a=da0hhDD4}EI^(}O;Hw?2CTbq)c0m$Zoirz&-UNZPMZs;KY~z$EYttqcT8s+iwp zx2Vt%gaV)>qJ+W_B0IpK;t-?)mu`vyDI46Fr?2q;r^TS~5U=u+B7unruk??Gh0r0d zQQ<|y`gMnC=d0&{J0MJjb`tYalA(swcn3GGF5{vJ^^8u z`k?`;P!{M&xt2u+fz4R}4c!2{&;w{VV9IFV0MG&$V9JvOg28~-7^NHV3a>%(ej@|$ zA2?v!GlIb*1MmVkU|^Xb4!a^4xQ*}+s%rO*|Cv||7nk#*0XP9pw=AOp6nY3tNCf23 G{U+>=P1w!= delta 452 zcmV;#0XzQQx(LX+2(U5(1j!3F^piFNHU;*Wry>lKaRWdC?3k0Y16c?=nx`m^l_F5H z6a=da0f4i>4}EI^yn{Y_w?2CTbq)b!m$ZoirxO{0z$DNQNZP4{s=^Q=JHVjg5SN9D z0Vx~Bn5VDs|EI;E@DQ)^lXQTI2(R>yhK0}}uO*ksiUCy%R+_L2Ape=LJRlL5DT@Io z4iTELaGy3{7J!As6rW9(UW)-5Fhpt=fR%(GeyR8rt8ri!fS)#C7Jz{Wk_aV$pNxeV z39p2+2!M&H{GGpleG`DYCYPv-0Us0ra+rw;r3#a3kCIdsmx-XsHn%L7+lv7sD^{BN zumhz4YpDSNYiU3LOgx&Z4TFJLmrGxmp#acNuln$(@FACAUYL^|mnn<^a0fewLVkdk zHMgLQ0Wb^@Er6u}fC@^gr2yY$x2Vt%m)@8G9|JWzh_;ylnFj$gmztmfy8$zoR-plT z0brNVp#eStV3!Y~0je_<=t#MiMFxS%SpW^)0K3ovIAF?X-~iA97+}hi0)oMS*chc7 u@CvU%@_r)&@EA0XP9nw?d-<6nY5Px#*@Ujg?zzgSs97 From bd94cfa43f518a7576089b43ef8e0805b82d6506 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 5 Dec 2025 02:54:57 -0600 Subject: [PATCH 11/12] Minor GUI fixes for triforce gfx --- source/classes/ItemGfxSelector.py | 11 ++++++++++- source/gui/adjust/overview.py | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/source/classes/ItemGfxSelector.py b/source/classes/ItemGfxSelector.py index 689ff626..ee5d528d 100644 --- a/source/classes/ItemGfxSelector.py +++ b/source/classes/ItemGfxSelector.py @@ -5,12 +5,13 @@ from Utils import local_path class ItemGfxSelector(object): - def __init__(self, parent, callback, valid_items=None): + def __init__(self, parent, callback, valid_items=None, adjuster=False): self.parent = parent self.window = Toplevel(parent) self.window.geometry("800x650") self.callback = callback self.valid_items = valid_items if valid_items else [] + self.adjuster = adjuster self.window.wm_title("Select Triforce Piece Graphics") self.window['padx'] = 5 @@ -38,6 +39,10 @@ class ItemGfxSelector(object): button = Button(frame, text="Default (Triforce)", command=self.use_default) button.pack(side=LEFT, padx=(0, 5)) + if adjuster: + button = Button(frame, text="Current triforce from rom", command=self.use_default_unchanged) + button.pack(side=LEFT, padx=(0, 5)) + set_icon(self.window) self.window.focus() @@ -116,6 +121,10 @@ class ItemGfxSelector(object): self.callback("Triforce") self.window.destroy() + def use_default_unchanged(self): + self.callback(None) + self.window.destroy() + def select_item(self, item_name): self.callback(item_name) self.window.destroy() diff --git a/source/gui/adjust/overview.py b/source/gui/adjust/overview.py index 55ce0ffd..2d062c8a 100644 --- a/source/gui/adjust/overview.py +++ b/source/gui/adjust/overview.py @@ -87,7 +87,7 @@ def adjust_page(top, parent, settings): def TriforceGfxSelectAdjuster(): from Tables import item_gfx_table valid_items = list(item_gfx_table.keys()) - ItemGfxSelector(parent, set_triforce_gfx, valid_items=valid_items) + ItemGfxSelector(parent, set_triforce_gfx, valid_items=valid_items, adjuster=True) triforceGfxSelectButton = Button(triforceGfxDialogFrame, text='...', command=TriforceGfxSelectAdjuster) From 72f370de4aeb38120ceac8c7770729dc7a0d6e1d Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 5 Dec 2025 03:04:32 -0600 Subject: [PATCH 12/12] Version bump 0.6.1.4 --- CHANGELOG.md | 7 +++++++ OverworldShuffle.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfa86a1e..66bfcb7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 0.6.1.4 +- Fixes for Glitched Rain State (Bonk Shuffle included) +- \~Merged in DR v1.5.0~ + - GT Key Logic fix + - New HUD key count behavior + - Pot uncoloring on collection + ## 0.6.1.3 - Added new post-gen option to change Triforce Piece GFX - Added new GFX for 10/11 keys to replace the A/B GFX diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 8cb1e68c..aefa4ae6 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -8,7 +8,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.6.1.3' +version_number = '0.6.1.4' # branch indicator is intentionally different across branches version_branch = '-u'